Introduces a recursive binding to the continuation.
Due to the use of callCC, calling the continuation will interrupt execution
of the current block creating an effect similar to goto/setjmp in C.
Modulemtl-prelude-2.0.3.2Haskell2010
MTLPrelude
Reexports of most definitions from "mtl" and "transformers".
For details check out the source.
- 14 types
- 8 classes
- 71 values
- Packagemtl-prelude-2.0.3.2
- Exports93
- LanguageHaskell2010
- LicenceMIT
- SourceMTLPrelude.hs
Lift a callCC operation to the new monad.
Methods
callCC :: ((a -> m b) -> m a) -> m acallCC(call-with-current-continuation) calls a function with the current continuation as its argument. Provides an escape continuation mechanism for use with Continuation monads. Escape continuations allow to abort the current computation and return a value immediately. They achieve a similar effect to throwError and catchError within an Except monad. Advantage of this function over callingreturnis that it makes the continuation explicit, allowing more flexibility and better control (see examples in Control.Monad.Cont).The standard idiom used with
callCCis to provide a lambda-expression to name the continuation. Then calling the named continuation anywhere within its scope will escape from the computation, even if it is many layers deep within nested computations.
Instances14MonadCont, …
MonadCont m => MonadCont (MaybeT m)Defined in mtl-2.3.1 · Control.Monad.Cont.ClassMonadCont m => MonadCont (ExceptT e m)Defined in mtl-2.3.1 · Control.Monad.Cont.ClassMonadCont m => MonadCont (IdentityT m)Defined in mtl-2.3.1 · Control.Monad.Cont.ClassMonadCont m => MonadCont (ReaderT r m)Defined in mtl-2.3.1 · Control.Monad.Cont.ClassMonadCont m => MonadCont (StateT s m)Defined in mtl-2.3.1 · Control.Monad.Cont.ClassMonadCont m => MonadCont (StateT s m)Defined in mtl-2.3.1 · Control.Monad.Cont.Class(Monoid w, MonadCont m) => MonadCont (AccumT w m)Defined in mtl-2.3.1 · Control.Monad.Cont.Class(Monoid w, MonadCont m) => MonadCont (WriterT w m)Defined in mtl-2.3.1 · Control.Monad.Cont.Class(Monoid w, MonadCont m) => MonadCont (WriterT w m)Defined in mtl-2.3.1 · Control.Monad.Cont.Class(Monoid w, MonadCont m) => MonadCont (WriterT w m)Defined in mtl-2.3.1 · Control.Monad.Cont.ClassMonadCont (ContT r m)Defined in mtl-2.3.1 · Control.Monad.Cont.Class(Monoid w, MonadCont m) => MonadCont (RWST r w s m)Defined in mtl-2.3.1 · Control.Monad.Cont.Class(Monoid w, MonadCont m) => MonadCont (RWST r w s m)Defined in mtl-2.3.1 · Control.Monad.Cont.Class(Monoid w, MonadCont m) => MonadCont (RWST r w s m)Defined in mtl-2.3.1 · Control.Monad.Cont.Class
A monad transformer that adds exceptions to other monads.
ExceptT constructs a monad parameterized over two things:
e - The exception type.
m - The inner monad.
The return function yields a computation that produces the given
value, while >>= sequences two subcomputations, exiting on the
first exception.
Instances33MonadRWS, Generic1, MonadAccum, MonadError, MonadReader, MonadState, …
MonadRWS r w s m => MonadRWS r w s (ExceptT e m)Defined in mtl-2.3.1 · Control.Monad.RWS.ClassFunctor m => Generic1 (ExceptT e m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.ExceptMonadAccum w m => MonadAccum w (ExceptT e m)Defined in mtl-2.3.1 · Control.Monad.AccumThe accumulated value 'survives' an exception: even if the computation fails to deliver a result, we still have an accumulated value.
Monad m => MonadError e (ExceptT e m)Defined in mtl-2.3.1 · Control.Monad.Error.ClassMonadReader r m => MonadReader r (ExceptT e m)Defined in mtl-2.3.1 · Control.Monad.Reader.ClassMonadState s m => MonadState s (ExceptT e m)Defined in mtl-2.3.1 · Control.Monad.State.ClassMonadWriter w m => MonadWriter w (ExceptT e m)Defined in mtl-2.3.1 · Control.Monad.Writer.ClassMonadSelect r m => MonadSelect r (ExceptT e m)Defined in mtl-2.3.1 · Control.Monad.SelectMonadTrans (ExceptT e)Defined in transformers-0.6.1.1 · Control.Monad.Trans.ExceptMonad m => Monad (ExceptT e m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.ExceptFunctor m => Functor (ExceptT e m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.ExceptMonadFix m => MonadFix (ExceptT e m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.ExceptMonadFail m => MonadFail (ExceptT e m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Except(Functor m, Monad m) => Applicative (ExceptT e m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.ExceptFoldable f => Foldable (ExceptT e f)Defined in transformers-0.6.1.1 · Control.Monad.Trans.ExceptTraversable f => Traversable (ExceptT e f)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Except(Functor m, Monad m, Monoid e) => Alternative (ExceptT e m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Except(Monad m, Monoid e) => MonadPlus (ExceptT e m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.ExceptMonadIO m => MonadIO (ExceptT e m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.ExceptMonadZip m => MonadZip (ExceptT e m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Except(Eq e, Eq1 m) => Eq1 (ExceptT e m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Except(Ord e, Ord1 m) => Ord1 (ExceptT e m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Except(Read e, Read1 m) => Read1 (ExceptT e m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Except(Show e, Show1 m) => Show1 (ExceptT e m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.ExceptContravariant m => Contravariant (ExceptT e m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.ExceptMonadCont m => MonadCont (ExceptT e m)Defined in mtl-2.3.1 · Control.Monad.Cont.Class(Eq e, Eq1 m, Eq a) => Eq (ExceptT e m a)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Except(Ord e, Ord1 m, Ord a) => Ord (ExceptT e m a)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Except(Read e, Read1 m, Read a) => Read (ExceptT e m a)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Except(Show e, Show1 m, Show a) => Show (ExceptT e m a)Defined in transformers-0.6.1.1 · Control.Monad.Trans.ExceptGeneric (ExceptT e m a)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Excepttype Rep (ExceptT e m a) = D1 ('MetaDataDefined in transformers-0.6.1.1 · Control.Monad.Trans.Except"ExceptT"
"Control.Monad.Trans.Except"
"transformers-0.6.1.1-a11a"
'True) (C1 ('MetaCons"ExceptT"
'PrefixI 'False) (S1 ('MetaSel 'Nothing 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (m (Either e a)))))type Rep1 (ExceptT e m) = D1 ('MetaDataDefined in transformers-0.6.1.1 · Control.Monad.Trans.Except"ExceptT"
"Control.Monad.Trans.Except"
"transformers-0.6.1.1-a11a"
'True) (C1 ('MetaCons"ExceptT"
'PrefixI 'False) (S1 ('MetaSel 'Nothing 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (m :.: Rec1 (Either e))))
Constructor for computations in the exception monad. (The inverse of runExcept).
Extractor for computations in the exception monad. (The inverse of except).
The inverse of ExceptT.
Map the unwrapped computation using the given function.
runExceptT (mapExceptT f m) = f (runExceptT m)
Transform any exceptions thrown by the computation using the given function (a specialization of withExceptT).
Transform any exceptions thrown by the computation using the given function.
Runs a Reader and extracts the final value from it.
(The inverse of reader.)
withReader Execute a computation in a modified environment (a specialization of withReaderT).
runReader (withReader f m) = runReader m . f
The reader monad transformer, which adds a read-only environment to the given monad.
The return function ignores the environment, while m >>= k
passes the inherited environment to both subcomputations:
Constructors
ReaderTrunReaderT :: r -> m a
Instances22Generic1, MonadAccum, MonadError, MonadReader, MonadState, MonadWriter, …
Generic1 (ReaderT r m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.ReaderMonadAccum w m => MonadAccum w (ReaderT r m)Defined in mtl-2.3.1 · Control.Monad.AccumMonadError e m => MonadError e (ReaderT r m)Defined in mtl-2.3.1 · Control.Monad.Error.ClassMonad m => MonadReader r (ReaderT r m)Defined in mtl-2.3.1 · Control.Monad.Reader.ClassMonadState s m => MonadState s (ReaderT r m)Defined in mtl-2.3.1 · Control.Monad.State.ClassMonadWriter w m => MonadWriter w (ReaderT r m)Defined in mtl-2.3.1 · Control.Monad.Writer.ClassMonadSelect r' m => MonadSelect r' (ReaderT r m)Defined in mtl-2.3.1 · Control.Monad.SelectProvides a read-only environment of type
rto the 'strategy' function. However, the 'ranking' function (or more accurately, representation) has no access tor. Put another way, you can influence what values get chosen by changingr, but not how solutions are ranked.MonadTrans (ReaderT r)Defined in transformers-0.6.1.1 · Control.Monad.Trans.ReaderMonad m => Monad (ReaderT r m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.ReaderFunctor m => Functor (ReaderT r m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.ReaderMonadFix m => MonadFix (ReaderT r m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.ReaderMonadFail m => MonadFail (ReaderT r m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.ReaderApplicative m => Applicative (ReaderT r m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.ReaderAlternative m => Alternative (ReaderT r m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.ReaderMonadPlus m => MonadPlus (ReaderT r m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.ReaderMonadIO m => MonadIO (ReaderT r m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.ReaderMonadZip m => MonadZip (ReaderT r m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.ReaderContravariant m => Contravariant (ReaderT r m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.ReaderMonadCont m => MonadCont (ReaderT r m)Defined in mtl-2.3.1 · Control.Monad.Cont.ClassGeneric (ReaderT r m a)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Readertype Rep (ReaderT r m a) = D1 ('MetaDataDefined in transformers-0.6.1.1 · Control.Monad.Trans.Reader"ReaderT"
"Control.Monad.Trans.Reader"
"transformers-0.6.1.1-a11a"
'True) (C1 ('MetaCons"ReaderT"
'PrefixI 'True) (S1 ('MetaSel ('Just"runReaderT"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (r -> m a))))type Rep1 (ReaderT r m) = D1 ('MetaDataDefined in transformers-0.6.1.1 · Control.Monad.Trans.Reader"ReaderT"
"Control.Monad.Trans.Reader"
"transformers-0.6.1.1-a11a"
'True) (C1 ('MetaCons"ReaderT"
'PrefixI 'True) (S1 ('MetaSel ('Just"runReaderT"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (FUN 'Many r :.: Rec1 m)))
Transform the computation inside a ReaderT.
runReaderT (mapReaderT f m) = f . runReaderT m
withReaderT Execute a computation in a modified environment (a more general version of local).
runReaderT (withReaderT f m) = runReaderT m . f
A monad containing an environment of type r, output of type w
and an updatable state of type s.
Construct an RWS computation from a function. (The inverse of runRWS.)
Unwrap an RWS computation as a function. (The inverse of rws.)
evalRWS :: RWS r w s aRWS computation to execute
-> rinitial environment
-> sinitial value
-> (a, w)final value and output
Evaluate a computation with the given initial state and environment, returning the final value and output, discarding the final state.
execRWS :: RWS r w s aRWS computation to execute
-> rinitial environment
-> sinitial value
-> (s, w)final state and output
Evaluate a computation with the given initial state and environment, returning the final state and output, discarding the final value.
A monad transformer adding reading an environment of type r,
collecting an output of type w and updating a state of type s
to an inner monad m.
Instances20MonadRWS, MonadAccum, MonadError, MonadReader, MonadState, MonadWriter, …
(Monoid w, Monad m) => MonadRWS r w s (RWST r w s m)Defined in mtl-2.3.1 · Control.Monad.RWS.Class(MonadAccum w' m, Monoid w) => MonadAccum w' (RWST r w s m)Defined in mtl-2.3.1 · Control.Monad.Accum(Monoid w, MonadError e m) => MonadError e (RWST r w s m)Defined in mtl-2.3.1 · Control.Monad.Error.Class(Monad m, Monoid w) => MonadReader r (RWST r w s m)Defined in mtl-2.3.1 · Control.Monad.Reader.Class(Monad m, Monoid w) => MonadState s (RWST r w s m)Defined in mtl-2.3.1 · Control.Monad.State.Class(Monoid w, Monad m) => MonadWriter w (RWST r w s m)Defined in mtl-2.3.1 · Control.Monad.Writer.Class(MonadSelect w' m, Monoid w) => MonadSelect w' (RWST r w s m)Defined in mtl-2.3.1 · Control.Monad.SelectA combination of an 'outer' ReaderT,
WriterTandStateT. In short, you get a value of typerwhich can influence what gets picked, but not how anything is ranked, and the 'ranking' function gets access to ansand aw, but can modify neither.Monoid w => MonadTrans (RWST r w s)Defined in transformers-0.6.1.1 · Control.Monad.Trans.RWS.Strict(Monoid w, Monad m) => Monad (RWST r w s m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.RWS.StrictFunctor m => Functor (RWST r w s m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.RWS.Strict(Monoid w, MonadFix m) => MonadFix (RWST r w s m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.RWS.Strict(Monoid w, MonadFail m) => MonadFail (RWST r w s m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.RWS.Strict(Monoid w, Functor m, Monad m) => Applicative (RWST r w s m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.RWS.Strict(Monoid w, Functor m, MonadPlus m) => Alternative (RWST r w s m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.RWS.Strict(Monoid w, MonadPlus m) => MonadPlus (RWST r w s m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.RWS.Strict(Monoid w, MonadIO m) => MonadIO (RWST r w s m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.RWS.StrictContravariant m => Contravariant (RWST r w s m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.RWS.Strict(Monoid w, MonadCont m) => MonadCont (RWST r w s m)Defined in mtl-2.3.1 · Control.Monad.Cont.ClassGeneric (RWST r w s m a)Defined in transformers-0.6.1.1 · Control.Monad.Trans.RWS.Stricttype Rep (RWST r w s m a) = D1 ('MetaDataDefined in transformers-0.6.1.1 · Control.Monad.Trans.RWS.Strict"RWST"
"Control.Monad.Trans.RWS.Strict"
"transformers-0.6.1.1-a11a"
'True) (C1 ('MetaCons"RWST"
'PrefixI 'True) (S1 ('MetaSel ('Just"runRWST"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (r -> s -> m (a, s, w)))))
evalRWST Evaluate a computation with the given initial state and environment, returning the final value and output, discarding the final state.
execRWST Evaluate a computation with the given initial state and environment, returning the final state and output, discarding the final value.
A state monad parameterized by the type s of the state to carry.
The return function leaves the state unchanged, while >>= uses
the final state of the first computation as the initial state of
the second.
runState :: State s astate-passing computation to execute
-> sinitial state
-> (a, s)return value and final state
Unwrap a state monad computation as a function. (The inverse of state.)
A state transformer monad parameterized by:
s- The state.m- The inner monad.
The return function leaves the state unchanged, while >>= uses
the final state of the first computation as the initial state of
the second.
Instances19MonadAccum, MonadError, MonadReader, MonadState, MonadWriter, MonadSelect, …
MonadAccum w m => MonadAccum w (StateT s m)Defined in mtl-2.3.1 · Control.Monad.AccumMonadError e m => MonadError e (StateT s m)Defined in mtl-2.3.1 · Control.Monad.Error.ClassMonadReader r m => MonadReader r (StateT s m)Defined in mtl-2.3.1 · Control.Monad.Reader.ClassMonad m => MonadState s (StateT s m)Defined in mtl-2.3.1 · Control.Monad.State.ClassMonadWriter w m => MonadWriter w (StateT s m)Defined in mtl-2.3.1 · Control.Monad.Writer.ClassMonadSelect w m => MonadSelect w (StateT s m)Defined in mtl-2.3.1 · Control.Monad.Select'Readerizes' the state: the 'ranking' function can see a value of type
s, but not modify it. Effectively, can be thought of as 'extending' the 'ranking' by all values ins, but whichsgets given to any rank calls is predetermined by the 'outer state' (and cannot change).MonadTrans (StateT s)Defined in transformers-0.6.1.1 · Control.Monad.Trans.State.StrictMonad m => Monad (StateT s m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.State.StrictFunctor m => Functor (StateT s m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.State.StrictMonadFix m => MonadFix (StateT s m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.State.StrictMonadFail m => MonadFail (StateT s m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.State.Strict(Functor m, Monad m) => Applicative (StateT s m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.State.Strict(Functor m, MonadPlus m) => Alternative (StateT s m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.State.StrictMonadPlus m => MonadPlus (StateT s m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.State.StrictMonadIO m => MonadIO (StateT s m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.State.StrictContravariant m => Contravariant (StateT s m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.State.StrictMonadCont m => MonadCont (StateT s m)Defined in mtl-2.3.1 · Control.Monad.Cont.ClassGeneric (StateT s m a)Defined in transformers-0.6.1.1 · Control.Monad.Trans.State.Stricttype Rep (StateT s m a) = D1 ('MetaDataDefined in transformers-0.6.1.1 · Control.Monad.Trans.State.Strict"StateT"
"Control.Monad.Trans.State.Strict"
"transformers-0.6.1.1-a11a"
'True) (C1 ('MetaCons"StateT"
'PrefixI 'True) (S1 ('MetaSel ('Just"runStateT"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (s -> m (a, s)))))
Evaluate a state computation with the given initial state and return the final value, discarding the final state.
evalStateT m s = liftM fst (runStateT m s)
Evaluate a state computation with the given initial state and return the final state, discarding the final value.
execStateT m s = liftM snd (runStateT m s)
withStateT f m executes action m on a state modified by
applying f.
withStateT f m = modify f >> m
Unwrap a writer computation as a (result, output) pair. (The inverse of writer.)
Extract the output from a writer computation.
execWriter m = snd (runWriter m)
A writer monad parameterized by:
w- the output to accumulate.m- The inner monad.
The return function produces the output mempty, while m >>= k
combines the outputs of the subcomputations using mappend (also
known as <>):
Constructors
WriterTrunWriterT :: m (a, w)
Instances30MonadAccum, MonadError, MonadReader, MonadState, MonadWriter, MonadSelect, …
(MonadAccum w' m, Monoid w) => MonadAccum w' (WriterT w m)Defined in mtl-2.3.1 · Control.Monad.Accum(Monoid w, MonadError e m) => MonadError e (WriterT w m)Defined in mtl-2.3.1 · Control.Monad.Error.Class(Monoid w, MonadReader r m) => MonadReader r (WriterT w m)Defined in mtl-2.3.1 · Control.Monad.Reader.Class(Monoid w, MonadState s m) => MonadState s (WriterT w m)Defined in mtl-2.3.1 · Control.Monad.State.Class(Monoid w, Monad m) => MonadWriter w (WriterT w m)Defined in mtl-2.3.1 · Control.Monad.Writer.Class(MonadSelect w' m, Monoid w) => MonadSelect w' (WriterT w m)Defined in mtl-2.3.1 · Control.Monad.Select'Readerizes' the writer: the 'ranking' function can see the value that's been accumulated (of type
w), but can't add anything to the log. Effectively, can be thought of as 'extending' the 'ranking' by all values ofw, but whichwgets given to any rank calls is predetermined by the 'outer writer' (and cannot change).Monoid w => MonadTrans (WriterT w)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Writer.Strict(Monoid w, Monad m) => Monad (WriterT w m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Writer.StrictFunctor m => Functor (WriterT w m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Writer.Strict(Monoid w, MonadFix m) => MonadFix (WriterT w m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Writer.Strict(Monoid w, MonadFail m) => MonadFail (WriterT w m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Writer.Strict(Monoid w, Applicative m) => Applicative (WriterT w m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Writer.StrictFoldable f => Foldable (WriterT w f)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Writer.StrictTraversable f => Traversable (WriterT w f)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Writer.Strict(Monoid w, Alternative m) => Alternative (WriterT w m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Writer.Strict(Monoid w, MonadPlus m) => MonadPlus (WriterT w m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Writer.Strict(Monoid w, MonadIO m) => MonadIO (WriterT w m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Writer.Strict(Monoid w, MonadZip m) => MonadZip (WriterT w m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Writer.Strict(Eq w, Eq1 m) => Eq1 (WriterT w m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Writer.Strict(Ord w, Ord1 m) => Ord1 (WriterT w m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Writer.Strict(Read w, Read1 m) => Read1 (WriterT w m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Writer.Strict(Show w, Show1 m) => Show1 (WriterT w m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Writer.StrictContravariant m => Contravariant (WriterT w m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Writer.Strict(Monoid w, MonadCont m) => MonadCont (WriterT w m)Defined in mtl-2.3.1 · Control.Monad.Cont.Class(Eq w, Eq1 m, Eq a) => Eq (WriterT w m a)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Writer.Strict(Ord w, Ord1 m, Ord a) => Ord (WriterT w m a)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Writer.Strict(Read w, Read1 m, Read a) => Read (WriterT w m a)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Writer.Strict(Show w, Show1 m, Show a) => Show (WriterT w m a)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Writer.StrictGeneric (WriterT w m a)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Writer.Stricttype Rep (WriterT w m a) = D1 ('MetaDataDefined in transformers-0.6.1.1 · Control.Monad.Trans.Writer.Strict"WriterT"
"Control.Monad.Trans.Writer.Strict"
"transformers-0.6.1.1-a11a"
'True) (C1 ('MetaCons"WriterT"
'PrefixI 'True) (S1 ('MetaSel ('Just"runWriterT"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (m (a, w)))))
Continuation monad.
Cont r a is a CPS ("continuation-passing style") computation that produces an
intermediate result of type a within a CPS computation whose final result type
is r.
The return function simply creates a continuation which passes the value on.
The >>= operator adds the bound function into the continuation chain.
Identity functor and monad. (a non-strict monad)
Examples
fmap (+1) (Identity 0)Identity 1
Identity [1, 2, 3] <> Identity [4, 5, 6]Identity [1,2,3,4,5,6]
>>> do
x <- Identity 10
y <- Identity (x + 5)
pure (x + y)
Identity 25
Constructors
IdentityrunIdentity :: a
Instances39Monad, Functor, MonadFix, Applicative, Foldable, Traversable, …
Monad IdentityDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.Functor.IdentityFunctor IdentityDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.Functor.IdentityMonadFix IdentityDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.Functor.IdentityApplicative IdentityDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.Functor.IdentityFoldable IdentityDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.Functor.IdentityTraversable IdentityDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.TraversableMonadZip IdentityDefined in base-4.20.2.0 · Control.Monad.ZipFoldable1 IdentityDefined in base-4.20.2.0 · Data.Foldable1Eq1 IdentityDefined in base-4.20.2.0 · Data.Functor.ClassesOrd1 IdentityDefined in base-4.20.2.0 · Data.Functor.ClassesRead1 IdentityDefined in base-4.20.2.0 · Data.Functor.ClassesShow1 IdentityDefined in base-4.20.2.0 · Data.Functor.ClassesGeneric1 IdentityDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.Functor.IdentityMonoid w => MonadAccum w (AccumT w Identity)Defined in mtl-2.3.1 · Control.Monad.AccumMonadSelect r (SelectT r Identity)Defined in mtl-2.3.1 · Control.Monad.SelectBounded a => Bounded (Identity a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Functor.IdentityEnum a => Enum (Identity a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Functor.IdentityEq a => Eq (Identity a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Functor.IdentityFloating a => Floating (Identity a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Functor.IdentityFractional a => Fractional (Identity a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Functor.IdentityIntegral a => Integral (Identity a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Functor.IdentityData a => Data (Identity a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.DataNum a => Num (Identity a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Functor.IdentityOrd a => Ord (Identity a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Functor.IdentityRead a => Read (Identity a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Functor.IdentityThis instance would be equivalent to the derived instances of the Identity newtype if the runIdentity field were removed
Real a => Real (Identity a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Functor.IdentityRealFloat a => RealFloat (Identity a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Functor.IdentityRealFrac a => RealFrac (Identity a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Functor.IdentityShow a => Show (Identity a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Functor.IdentityThis instance would be equivalent to the derived instances of the Identity newtype if the runIdentity field were removed
Ix a => Ix (Identity a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Functor.IdentityIsString a => IsString (Identity a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.StringGeneric (Identity a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Functor.IdentitySemigroup a => Semigroup (Identity a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Functor.IdentityMonoid a => Monoid (Identity a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Functor.IdentityBits a => Bits (Identity a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Functor.IdentityFiniteBits a => FiniteBits (Identity a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Functor.IdentityStorable a => Storable (Identity a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Functor.Identitytype Rep (Identity a) = D1 ('MetaDataDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.Functor.Identity"Identity"
"GHC.Internal.Data.Functor.Identity"
"ghc-internal"
'True) (C1 ('MetaCons"Identity"
'PrefixI 'True) (S1 ('MetaSel ('Just"runIdentity"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a)))type Rep1 Identity = D1 ('MetaDataDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.Functor.Identity"Identity"
"GHC.Internal.Data.Functor.Identity"
"ghc-internal"
'True) (C1 ('MetaCons"Identity"
'PrefixI 'True) (S1 ('MetaSel ('Just"runIdentity"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1))
Extract the output from a writer computation.
execWriterT m = liftM snd (runWriterT m)
Map both the return value and output of a computation using the given function.
runWriterT (mapWriterT f m) = f (runWriterT m)
Simplified version of label without arguments.
Instances13MonadAccum, MonadReader, MonadState, MonadSelect, MonadTrans, Monad, …
MonadAccum w m => MonadAccum w (ContT r m)Defined in mtl-2.3.1 · Control.Monad.AccumThe continuation can see, and interact with, the accumulated value.
MonadReader r' m => MonadReader r' (ContT r m)Defined in mtl-2.3.1 · Control.Monad.Reader.ClassMonadState s m => MonadState s (ContT r m)Defined in mtl-2.3.1 · Control.Monad.State.ClassMonadSelect r' m => MonadSelect r' (ContT r m)Defined in mtl-2.3.1 · Control.Monad.SelectThe continuation describes a way of choosing a 'search' or 'ranking' strategy for
r, based on a 'ranking' usingr', given anya. We then get a 'search' strategy forr.MonadTrans (ContT r)Defined in transformers-0.6.1.1 · Control.Monad.Trans.ContMonad (ContT r m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.ContFunctor (ContT r m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.ContMonadFail m => MonadFail (ContT r m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.ContApplicative (ContT r m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.ContMonadIO m => MonadIO (ContT r m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.ContMonadCont (ContT r m)Defined in mtl-2.3.1 · Control.Monad.Cont.ClassGeneric (ContT r m a)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Conttype Rep (ContT r m a) = D1 ('MetaDataDefined in transformers-0.6.1.1 · Control.Monad.Trans.Cont"ContT"
"Control.Monad.Trans.Cont"
"transformers-0.6.1.1-a11a"
'True) (C1 ('MetaCons"ContT"
'PrefixI 'True) (S1 ('MetaSel ('Just"runContT"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ((a -> m r) -> m r))))
Instances33MonadTrans, MonadRWS, Generic1, MonadAccum, MonadError, MonadReader, …
MonadTrans MaybeTDefined in transformers-0.6.1.1 · Control.Monad.Trans.MaybeMonadRWS r w s m => MonadRWS r w s (MaybeT m)Defined in mtl-2.3.1 · Control.Monad.RWS.ClassFunctor m => Generic1 (MaybeT m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.MaybeMonadAccum w m => MonadAccum w (MaybeT m)Defined in mtl-2.3.1 · Control.Monad.AccumThe accumulated value 'survives' an error: even if the computation fails to deliver a result, we still have an accumulated value.
MonadError e m => MonadError e (MaybeT m)Defined in mtl-2.3.1 · Control.Monad.Error.ClassMonadReader r m => MonadReader r (MaybeT m)Defined in mtl-2.3.1 · Control.Monad.Reader.ClassMonadState s m => MonadState s (MaybeT m)Defined in mtl-2.3.1 · Control.Monad.State.ClassMonadWriter w m => MonadWriter w (MaybeT m)Defined in mtl-2.3.1 · Control.Monad.Writer.ClassMonadSelect r m => MonadSelect r (MaybeT m)Defined in mtl-2.3.1 · Control.Monad.SelectMonad m => Monad (MaybeT m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.MaybeFunctor m => Functor (MaybeT m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.MaybeMonadFix m => MonadFix (MaybeT m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.MaybeMonad m => MonadFail (MaybeT m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Maybe(Functor m, Monad m) => Applicative (MaybeT m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.MaybeFoldable f => Foldable (MaybeT f)Defined in transformers-0.6.1.1 · Control.Monad.Trans.MaybeTraversable f => Traversable (MaybeT f)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Maybe(Functor m, Monad m) => Alternative (MaybeT m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.MaybeMonad m => MonadPlus (MaybeT m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.MaybeMonadIO m => MonadIO (MaybeT m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.MaybeMonadZip m => MonadZip (MaybeT m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.MaybeEq1 m => Eq1 (MaybeT m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.MaybeOrd1 m => Ord1 (MaybeT m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.MaybeRead1 m => Read1 (MaybeT m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.MaybeShow1 m => Show1 (MaybeT m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.MaybeContravariant m => Contravariant (MaybeT m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.MaybeMonadCont m => MonadCont (MaybeT m)Defined in mtl-2.3.1 · Control.Monad.Cont.Class(Eq1 m, Eq a) => Eq (MaybeT m a)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Maybe(Ord1 m, Ord a) => Ord (MaybeT m a)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Maybe(Read1 m, Read a) => Read (MaybeT m a)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Maybe(Show1 m, Show a) => Show (MaybeT m a)Defined in transformers-0.6.1.1 · Control.Monad.Trans.MaybeGeneric (MaybeT m a)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Maybetype Rep (MaybeT m a) = D1 ('MetaDataDefined in transformers-0.6.1.1 · Control.Monad.Trans.Maybe"MaybeT"
"Control.Monad.Trans.Maybe"
"transformers-0.6.1.1-a11a"
'True) (C1 ('MetaCons"MaybeT"
'PrefixI 'True) (S1 ('MetaSel ('Just"runMaybeT"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (m (Maybe a)))))type Rep1 (MaybeT m) = D1 ('MetaDataDefined in transformers-0.6.1.1 · Control.Monad.Trans.Maybe"MaybeT"
"Control.Monad.Trans.Maybe"
"transformers-0.6.1.1-a11a"
'True) (C1 ('MetaCons"MaybeT"
'PrefixI 'True) (S1 ('MetaSel ('Just"runMaybeT"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (m :.: Rec1 Maybe)))
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.
Instances15MonadTrans, …
MonadTrans MaybeTDefined in transformers-0.6.1.1 · Control.Monad.Trans.MaybeMonoid 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 (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.CPSMonadTrans (ContT r)Defined in transformers-0.6.1.1 · Control.Monad.Trans.ContMonoid 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
See examples in Control.Monad.Reader.
Note, the partially applied function type (->) r is a simple reader monad.
See the instance declaration below.
Instances16MonadReader, …
MonadReader r m => MonadReader r (MaybeT m)Defined in mtl-2.3.1 · Control.Monad.Reader.ClassMonad m => MonadReader r (ReaderT r m)Defined in mtl-2.3.1 · Control.Monad.Reader.ClassMonadReader r m => MonadReader r (ExceptT e m)Defined in mtl-2.3.1 · Control.Monad.Reader.ClassMonadReader r m => MonadReader r (IdentityT m)Defined in mtl-2.3.1 · Control.Monad.Reader.ClassMonadReader r m => MonadReader r (StateT s m)Defined in mtl-2.3.1 · Control.Monad.Reader.ClassMonadReader r m => MonadReader r (StateT s m)Defined in mtl-2.3.1 · Control.Monad.Reader.ClassMonadReader r' m => MonadReader r' (SelectT r m)Defined in mtl-2.3.1 · Control.Monad.Reader.Class(Monoid w, MonadReader r m) => MonadReader r (AccumT w m)Defined in mtl-2.3.1 · Control.Monad.Reader.Class(Monoid w, MonadReader r m) => MonadReader r (WriterT w m)Defined in mtl-2.3.1 · Control.Monad.Reader.Class(Monoid w, MonadReader r m) => MonadReader r (WriterT w m)Defined in mtl-2.3.1 · Control.Monad.Reader.Class(Monoid w, MonadReader r m) => MonadReader r (WriterT w m)Defined in mtl-2.3.1 · Control.Monad.Reader.ClassMonadReader r ((->) r)Defined in mtl-2.3.1 · Control.Monad.Reader.ClassMonadReader r' m => MonadReader r' (ContT r m)Defined in mtl-2.3.1 · Control.Monad.Reader.Class(Monad m, Monoid w) => MonadReader r (RWST r w s m)Defined in mtl-2.3.1 · Control.Monad.Reader.Class(Monad m, Monoid w) => MonadReader r (RWST r w s m)Defined in mtl-2.3.1 · Control.Monad.Reader.Class(Monad m, Monoid w) => MonadReader r (RWST r w s m)Defined in mtl-2.3.1 · Control.Monad.Reader.Class
Construct a continuation-passing computation from a function. (The inverse of runCont)
runCont The result of running a CPS computation with a given final continuation. (The inverse of cont)
Monads in which IO computations may be embedded. Any monad built by applying a sequence of monad transformers to the IO monad will be an instance of this class.
Instances should satisfy the following laws, which state that liftIO is a transformer of monads:
Methods
liftIO :: IO a -> m aLift a computation from the IO monad. This allows us to run IO computations in any monadic stack, so long as it supports these kinds of operations (i.e. IO is the base monad for the stack).
Example
import Control.Monad.Trans.State -- from the "transformers" library printState :: Show s => StateT s IO () printState = do state <- get liftIO $ print stateHad we omitted
liftIO, we would have ended up with this error:• Couldn't match type ‘IO’ with ‘StateT s IO’ Expected type: StateT s IO () Actual type: IO ()The important part here is the mismatch between
StateT s IO ()andIO ().Luckily, we know of a function that takes an
IO aand returns an(m a):liftIO, enabling us to run the program and see the expected results:> evalStateT printState "hello" "hello" > evalStateT printState 3 3
Instances16MonadIO, …
MonadIO IODefined in base-4.20.2.0 · Control.Monad.IO.ClassMonadIO m => MonadIO (MaybeT m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.MaybeMonadIO m => MonadIO (ExceptT e m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.ExceptMonadIO m => MonadIO (IdentityT m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.IdentityMonadIO m => MonadIO (ReaderT r m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.ReaderMonadIO m => MonadIO (SelectT r m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.SelectMonadIO m => MonadIO (StateT s m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.State.LazyMonadIO m => MonadIO (StateT s m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.State.StrictMonadIO m => MonadIO (WriterT w m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Writer.CPS(Monoid w, MonadIO m) => MonadIO (WriterT w m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Writer.Lazy(Monoid w, MonadIO m) => MonadIO (WriterT w m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.Writer.Strict(Monoid w, Functor m, MonadIO m) => MonadIO (AccumT w m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.AccumMonadIO m => MonadIO (ContT r m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.ContMonadIO m => MonadIO (RWST r w s m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.RWS.CPS(Monoid w, MonadIO m) => MonadIO (RWST r w s m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.RWS.Lazy(Monoid w, MonadIO m) => MonadIO (RWST r w s m)Defined in transformers-0.6.1.1 · Control.Monad.Trans.RWS.Strict
The strategy of combining computations that can throw exceptions by bypassing bound functions from the point an exception is thrown to the point that it is handled.
Is parameterized over the type of error information and
the monad type constructor.
It is common to use Either String as the monad type constructor
for an error monad in which error descriptions take the form of strings.
In that case and many other common cases the resulting monad is already defined
as an instance of the MonadError class.
You can also define your own error type and/or use a monad type constructor
other than Either or StringEither .
In these cases you will have to explicitly define instances of the MonadError
class.
(If you are using the deprecated IOErrorControl.Monad.Error or
Control.Monad.Trans.Error, you may also have to define an Error instance.)
Methods
throwError :: e -> m aIs used within a monadic computation to begin exception processing.
catchError :: m a -> (e -> m a) -> m aA handler function to handle previous errors and return to normal execution. A common idiom is:
do { action1; action2; action3 } `catchError` handlerwhere the
actionfunctions can call throwError. Note thathandlerand the do-block must have the same return type.
Instances16MonadError, …
MonadError IOException IODefined in mtl-2.3.1 · Control.Monad.Error.ClassMonadError () MaybeDefined in mtl-2.3.1 · Control.Monad.Error.ClassMonadError e (Either e)Defined in mtl-2.3.1 · Control.Monad.Error.ClassMonadError e m => MonadError e (MaybeT m)Defined in mtl-2.3.1 · Control.Monad.Error.ClassMonad m => MonadError e (ExceptT e m)Defined in mtl-2.3.1 · Control.Monad.Error.ClassMonadError e m => MonadError e (IdentityT m)Defined in mtl-2.3.1 · Control.Monad.Error.ClassMonadError e m => MonadError e (ReaderT r m)Defined in mtl-2.3.1 · Control.Monad.Error.ClassMonadError e m => MonadError e (StateT s m)Defined in mtl-2.3.1 · Control.Monad.Error.ClassMonadError e m => MonadError e (StateT s m)Defined in mtl-2.3.1 · Control.Monad.Error.Class(Monoid w, MonadError e m) => MonadError e (AccumT w m)Defined in mtl-2.3.1 · Control.Monad.Error.Class(Monoid w, MonadError e m) => MonadError e (WriterT w m)Defined in mtl-2.3.1 · Control.Monad.Error.Class(Monoid w, MonadError e m) => MonadError e (WriterT w m)Defined in mtl-2.3.1 · Control.Monad.Error.Class(Monoid w, MonadError e m) => MonadError e (WriterT w m)Defined in mtl-2.3.1 · Control.Monad.Error.Class(Monoid w, MonadError e m) => MonadError e (RWST r w s m)Defined in mtl-2.3.1 · Control.Monad.Error.Class(Monoid w, MonadError e m) => MonadError e (RWST r w s m)Defined in mtl-2.3.1 · Control.Monad.Error.Class(Monoid w, MonadError e m) => MonadError e (RWST r w s m)Defined in mtl-2.3.1 · Control.Monad.Error.Class
As handle is flipped catch, handleError
is flipped catchError.
Lifts an Either e into any MonadError e.
do { val <- liftEither =<< action1; action2 }where action1 returns an Either to represent errors.
MonadError analogue of the mapExceptT function. The
computation is unwrapped, a function is applied to the Either, and
the result is lifted into the second MonadError instance.
A different MonadError analogue to the withExceptT function.
Modify the value (and possibly the type) of an error in an ExceptT-transformed
monad, while stripping the ExceptT layer.
This is useful for adapting the MonadError constraint of a computation.
For example:
data DatabaseError = ...
performDatabaseQuery :: (MonadError DatabaseError m, ...) => m PersistedValue
data AppError
= MkDatabaseError DatabaseError
| ...
app :: (MonadError AppError m, ...) => m ()Given these types, performDatabaseQuery cannot be used directly inside
app, because the error types don't match. Using modifyError, an equivalent
function with a different error type can be constructed:
performDatabaseQuery' :: (MonadError AppError m, ...) => m PersistedValue
performDatabaseQuery' = modifyError MkDatabaseError performDatabaseQuerySince the error types do match, performDatabaseQuery' _can_ be used in app,
assuming all other constraints carry over.
This works by instantiating the m in the type of performDatabaseQuery to
ExceptT DatabaseError m', which satisfies the MonadError DatabaseError
constraint. Immediately, the ExceptT DatabaseError layer is unwrapped,
producing Either a DatabaseError or a PersistedValue. If it's the former,
the error is wrapped in MkDatabaseError and re-thrown in the inner monad,
otherwise the result value is returned.
MonadError analogue to the try function.
MonadError analogue to the withExceptT function.
Modify the value (but not the type) of an error. The type is
fixed because of the functional dependency m -> e. If you need
to change the type of e use mapError or modifyError.
Methods
writer :: (a, w) -> m awriter (a,w)embeds a simple writer action.tell :: w -> m ()tell wis an action that produces the outputw.listen :: m a -> m (a, w)listen mis an action that executes the actionmand adds its output to the value of the computation.pass :: m (a, w -> w) -> m apass mis an action that executes the actionm, which returns a value and a function, and returns the value, applying the function to the output.
Instances14MonadWriter, …
Monoid w => MonadWriter w (Tuple2 w)Defined in mtl-2.3.1 · Control.Monad.Writer.ClassMonadWriter w m => MonadWriter w (MaybeT m)Defined in mtl-2.3.1 · Control.Monad.Writer.ClassMonadWriter w m => MonadWriter w (ExceptT e m)Defined in mtl-2.3.1 · Control.Monad.Writer.ClassMonadWriter w m => MonadWriter w (IdentityT m)Defined in mtl-2.3.1 · Control.Monad.Writer.ClassMonadWriter w m => MonadWriter w (ReaderT r m)Defined in mtl-2.3.1 · Control.Monad.Writer.ClassMonadWriter w m => MonadWriter w (StateT s m)Defined in mtl-2.3.1 · Control.Monad.Writer.ClassMonadWriter w m => MonadWriter w (StateT s m)Defined in mtl-2.3.1 · Control.Monad.Writer.Class(Monoid w, Monad m) => MonadWriter w (WriterT w m)Defined in mtl-2.3.1 · Control.Monad.Writer.Class(Monoid w, Monad m) => MonadWriter w (WriterT w m)Defined in mtl-2.3.1 · Control.Monad.Writer.Class(Monoid w, Monad m) => MonadWriter w (WriterT w m)Defined in mtl-2.3.1 · Control.Monad.Writer.Class(Monoid w', MonadWriter w m) => MonadWriter w (AccumT w' m)Defined in mtl-2.3.1 · Control.Monad.Writer.Class(Monoid w, Monad m) => MonadWriter w (RWST r w s m)Defined in mtl-2.3.1 · Control.Monad.Writer.Class(Monoid w, Monad m) => MonadWriter w (RWST r w s m)Defined in mtl-2.3.1 · Control.Monad.Writer.Class(Monoid w, Monad m) => MonadWriter w (RWST r w s m)Defined in mtl-2.3.1 · Control.Monad.Writer.Class
Lift a listen operation to the new monad.
Lift a pass operation to the new monad.
Lift a catchE operation to the new monad.
Retrieves a function of the current environment.
Minimal definition is either both of get and put or just state
Instances15MonadState, …
MonadState s m => MonadState s (MaybeT m)Defined in mtl-2.3.1 · Control.Monad.State.ClassMonad m => MonadState s (StateT s m)Defined in mtl-2.3.1 · Control.Monad.State.ClassMonad m => MonadState s (StateT s m)Defined in mtl-2.3.1 · Control.Monad.State.ClassMonadState s m => MonadState s (ExceptT e m)Defined in mtl-2.3.1 · Control.Monad.State.ClassMonadState s m => MonadState s (IdentityT m)Defined in mtl-2.3.1 · Control.Monad.State.ClassMonadState s m => MonadState s (ReaderT r m)Defined in mtl-2.3.1 · Control.Monad.State.ClassMonadState s m => MonadState s (SelectT r m)Defined in mtl-2.3.1 · Control.Monad.State.Class(Monoid w, MonadState s m) => MonadState s (AccumT w m)Defined in mtl-2.3.1 · Control.Monad.State.Class(Monoid w, MonadState s m) => MonadState s (WriterT w m)Defined in mtl-2.3.1 · Control.Monad.State.Class(Monoid w, MonadState s m) => MonadState s (WriterT w m)Defined in mtl-2.3.1 · Control.Monad.State.Class(Monoid w, MonadState s m) => MonadState s (WriterT w m)Defined in mtl-2.3.1 · Control.Monad.State.ClassMonadState s m => MonadState s (ContT r m)Defined in mtl-2.3.1 · Control.Monad.State.Class(Monad m, Monoid w) => MonadState s (RWST r w s m)Defined in mtl-2.3.1 · Control.Monad.State.Class(Monad m, Monoid w) => MonadState s (RWST r w s m)Defined in mtl-2.3.1 · Control.Monad.State.Class(Monad m, Monoid w) => MonadState s (RWST r w s m)Defined in mtl-2.3.1 · Control.Monad.State.Class
Gets specific component of the state, using a projection function supplied.
Monadic state transformer.
Maps an old state to a new state inside a state monad. The old state is thrown away.
Main> :t modify ((+1) :: Int -> Int)
modify (...) :: (MonadState Int a) => a ()This says that modify (+1) acts over any
Monad that is a member of the MonadState class,
with an Int state.
A variant of modify in which the computation is strict in the new state.
class (Monoid w, MonadReader r m, MonadWriter w m, MonadState s m) => MonadRWS r w s (m :: Type -> Type) | m -> r, m -> w, m -> sInstances6MonadRWS
MonadRWS r w s m => MonadRWS r w s (MaybeT m)Defined in mtl-2.3.1 · Control.Monad.RWS.ClassMonadRWS r w s m => MonadRWS r w s (ExceptT e m)Defined in mtl-2.3.1 · Control.Monad.RWS.ClassMonadRWS r w s m => MonadRWS r w s (IdentityT m)Defined in mtl-2.3.1 · Control.Monad.RWS.Class(Monoid w, Monad m) => MonadRWS r w s (RWST r w s m)Defined in mtl-2.3.1 · Control.Monad.RWS.Class(Monoid w, Monad m) => MonadRWS r w s (RWST r w s m)Defined in mtl-2.3.1 · Control.Monad.RWS.Class(Monoid w, Monad m) => MonadRWS r w s (RWST r w s m)Defined in mtl-2.3.1 · Control.Monad.RWS.Class