SafeIN )A monad in the category of monads, using  from  as the analog of  and  as the analog of (): \embed lift = id embed f (lift m) = f m embed g (embed f t) = embed (\m -> embed g (f m)) tEmbed a newly created  layer within an existing layer is analogous to ()+A functor in the category of monads, using  as the analog of : 0hoist (f . g) = hoist f . hoist g hoist id = idLift a monad morphism from m to n$ into a monad morphism from (t m) to (t n)A function that  generalizes the  base monad to be any monad. Squash two  layers into a single layer is analogous to  Compose two  layer-building functions() is analogous to () Equivalent to () with the arguments flipped( ) is analogous to ()  An infix operator equivalent to ( ) is analogous to () Equivalent to ( ) with the arguments flipped( ) is analogous to ()"  !"#$%&'()*+,-./     !"#$%&'()*+,-./   Safe3457> "Composition of monad transformers.#Transform the computation inside a  . 0123456789:;<=>    0123456789:;<=>  ?      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGmmorp_2Jm5FlYBlmjDhcU1ovZRKPControl.Monad.MorphControl.Monad.Trans.Composetrans_GZTjP9K5WFq01xC9BAGQpFControl.Monad.Trans.Class MonadTransliftMMonadembedMFunctorhoist generalizesquash>|><|<=<||>=ComposeT getComposeT mapComposeTbaseGHC.Basereturn=<<fmapData.Functor.IdentityIdentityjoin Control.Monad>=><=<>>=$fMMonadWriterT$fMMonadWriterT0$fMMonadReaderT$fMMonadMaybeT $fMMonadListT$fMMonadIdentityT$fMMonadExceptT$fMMonadErrorT$fMFunctorLift$fMFunctorBackwards$fMFunctorProduct$fMFunctorCompose$fMFunctorWriterT$fMFunctorWriterT0$fMFunctorStateT$fMFunctorStateT0$fMFunctorRWST$fMFunctorRWST0$fMFunctorReaderT$fMFunctorMaybeT$fMFunctorListT$fMFunctorIdentityT$fMFunctorExceptT$fMFunctorErrorT$fMonadWriterwComposeT$fMonadStatesComposeT$fMonadReaderrComposeT$fMonadRWSrwsComposeT$fMonadErroreComposeT$fMonadContComposeT$fTraversableComposeT$fFoldableComposeT$fMonadIOComposeT$fMonadPlusComposeT$fMonadComposeT$fAlternativeComposeT$fApplicativeComposeT$fFunctorComposeT$fMonadTransComposeT