Hoogle Search
Within LTS Haskell 24.27 (ghc-9.10.3)
Note that Stackage only displays results for the latest LTS and Nightly snapshot. Learn more.
(
.$ ) :: Monad m => m (m a) -> m acomposition-prelude Control.Composition Infix version of join As an example, one could use this to rewrite
between (char '"') (char '"')
tobetween .$ (char '"')
OrfromEither :: Either a a -> a fromEither = either id id
tofromEither :: Either a a -> a fromEither = either .$ id
join :: Monad m => m (m a) -> m averset Verset The join function is the conventional monad join operator. It is used to remove one level of monadic structure, projecting its bound argument into the outer level. 'join bss' can be understood as the do expression
do bs <- bss bs
Examples
>>> join [[1, 2, 3], [4, 5, 6], [7, 8, 9]] [1,2,3,4,5,6,7,8,9]
>>> join (Just (Just 3)) Just 3
A common use of join is to run an IO computation returned from an STM transaction, since STM transactions can't perform IO directly. Recall thatatomically :: STM a -> IO a
is used to run STM transactions atomically. So, by specializing the types of atomically and join toatomically :: STM (IO b) -> IO (IO b) join :: IO (IO b) -> IO b
we can compose them asjoin . atomically :: STM (IO b) -> IO b
to run an STM transaction and the IO action it returns.