class (forall (m :: Type -> Type). Monad m => Monad (t m)) => MonadTrans (t :: (Type -> Type) -> Type -> Type) whereThe class of monad transformers.
For any monad m, the result t m should also be a monad,
and lift should be a monad transformation from m to t m,
i.e. it should satisfy the following laws:
Since 0.6.0.0 and for GHC 8.6 and later, the requirement that t m
be a Monad is enforced by the implication constraint
forall m. Monad m => Monad (t m) enabled by the
QuantifiedConstraints extension.
Ambiguity error with GHC 9.0 to 9.2.2
These versions of GHC have a bug (https://gitlab.haskell.org/ghc/ghc/-/issues/20582) which causes constraints like
(MonadTrans t, forall m. Monad m => Monad (t m)) => ...
to be reported as ambiguous. For transformers 0.6 and later, this can be fixed by removing the second constraint, which is implied by the first.
Instances32MonadTrans, …
MonadTrans CatchTDefined in exceptions-0.10.9 · Control.Monad.Catch.PureMonadTrans FreeDefined in free-5.2 · Control.Monad.FreeThis is not a true monad transformer. It is only a monad transformer "up to retract".
MonadTrans FreeDefined in free-5.2 · Control.Monad.Free.ApThis is not a true monad transformer. It is only a monad transformer "up to retract".
MonadTrans FDefined in free-5.2 · Control.Monad.Free.ChurchMonadTrans IterTDefined in free-5.2 · Control.Monad.Trans.IterMonadTrans CoyonedaDefined in kan-extensions-5.2.7 · Data.Functor.CoyonedaMonadTrans YonedaDefined in kan-extensions-5.2.7 · Data.Functor.YonedaMonadTrans MaybeTDefined in transformers-0.6.1.1 · Control.Monad.Trans.MaybeRepresentable f => MonadTrans (ReaderT f)Defined in adjunctions-4.4.3 · Control.Monad.Representable.ReaderRepresentable f => MonadTrans (StateT f)Defined in adjunctions-4.4.3 · Control.Monad.Representable.StateAlternative f => MonadTrans (CofreeT f)Defined in free-5.2 · Control.Comonad.Trans.CofreeApplicative f => MonadTrans (FreeT f)Defined in free-5.2 · Control.Monad.Trans.Free.ApFunctor f => MonadTrans (FreeT f)Defined in free-5.2 · Control.Monad.Trans.FreeMonoid w => MonadTrans (AccumT w)Defined in transformers-0.6.1.1 · Control.Monad.Trans.AccumMonoid w => MonadTrans (WriterT w)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Writer.LazyMonoid w => MonadTrans (WriterT w)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Writer.StrictMonadTrans IdentityTDefined in transformers-0.6.1.1 · Control.Monad.Trans.IdentityMonadTrans (FT f)Defined in free-5.2 · Control.Monad.Trans.Free.ChurchMonadTrans (ExceptT e)Defined in transformers-0.6.1.1 · Control.Monad.Trans.ExceptMonadTrans (ReaderT r)Defined in transformers-0.6.1.1 · Control.Monad.Trans.ReaderMonadTrans (SelectT r)Defined in transformers-0.6.1.1 · Control.Monad.Trans.SelectMonadTrans (StateT s)Defined in transformers-0.6.1.1 · Control.Monad.Trans.State.LazyMonadTrans (StateT s)Defined in transformers-0.6.1.1 · Control.Monad.Trans.State.StrictMonadTrans (WriterT w)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Writer.CPSComonad w => MonadTrans (ContsT r w)Defined in adjunctions-4.4.3 · Control.Monad.Trans.ContsComonad w => MonadTrans (CoT w)Defined in kan-extensions-5.2.7 · Control.Monad.CoMonadTrans CodensityDefined in kan-extensions-5.2.7 · Control.Monad.CodensityMonadTrans (ContT r)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Cont(Adjunction f g, Traversable f) => MonadTrans (AdjointT f g)Defined in adjunctions-4.4.3 · Control.Monad.Trans.AdjointExploiting this instance requires that we have the missing Traversables for Identity, (,)e and IdentityT
Monoid w => MonadTrans (RWST r w s)Defined in transformers-0.6.1.1 · Control.Monad.Trans.RWS.LazyMonoid w => MonadTrans (RWST r w s)Defined in transformers-0.6.1.1 · Control.Monad.Trans.RWS.StrictMonadTrans (RWST r w s)Defined in transformers-0.6.1.1 · Control.Monad.Trans.RWS.CPS