Modulefused-effects-1.1.2.7Haskell2010
Control.Effect.Lift
Provides a mechanism to kick off the evaluation of an effect stack that takes place in a monadic context.
Lift effects are always the last effect in a given effect stack. These stacks are invoked with runM or run.
Predefined carriers:
- 2 types
- 1 class
- 4 values
- Packagefused-effects-1.1.2.7
- Exports7
- LanguageHaskell2010
- LicenceBSD-3-Clause
- SourceLift.hs
Lift effect
4 declarationsGiven a Lift n constraint in a signature carried by m, sendM
promotes arbitrary actions of type n a to m a. It is spiritually
similar to lift from the MonadTrans typeclass.
A type-restricted variant of sendM for IO actions.
This is particularly useful when you have a Has (Lift IO) sig m constraint for the use of liftWith, and want to run an action abstracted over MonadIO. IO has a MonadIO instance, and sendIO’s type restricts the action’s type to IO without further type annotations.
Run actions in an outer context.
This can be used to provide interoperation with base functionality like Control.Exception.catch:
liftWith $ \ hdl ctx -> catch (hdl (m <$ ctx)) (hdl . (<$ ctx) . h)
The higher-order function takes both an initial context, and a handler phrased as a distributive law (as described in the documentation for Handler). This handler takes actions lifted into a context functor, which can be either the initial context, or the derived context produced by handling a previous action.
As with MonadBaseControl, care must be taken when lifting functions like Control.Exception.finally which don’t use the return value of one of their actions, as this can lead to dropped effects.
Re-exports
3 declarationsclass Monad m => Algebra (sig :: (Type -> Type) -> Type -> Type) (m :: Type -> Type) | m -> sig whereThe class of carriers (results) for algebras (effect handlers) over signatures (effects), whose actions are given by the alg method.
Instances53Algebra, …
Algebra Choose NonEmptyDefined in fused-effects-1.1.2.7 · Control.AlgebraAlgebra Empty MaybeDefined in fused-effects-1.1.2.7 · Control.AlgebraAlgebra NonDet []Defined in fused-effects-1.1.2.7 · Control.AlgebraAlgebra sig m => Algebra sig (Choosing m)Defined in fused-effects-1.1.2.7 · Control.Effect.ChooseAlgebra sig m => Algebra sig (Ap m)Defined in fused-effects-1.1.2.7 · Control.AlgebraAlgebra sig m => Algebra sig (Alt m)Defined in fused-effects-1.1.2.7 · Control.AlgebraAlgebra sig m => Algebra sig (IdentityT m)Defined in fused-effects-1.1.2.7 · Control.AlgebraAlgebra (Lift Identity) IdentityDefined in fused-effects-1.1.2.7 · Control.AlgebraAlgebra (Lift IO) IODefined in fused-effects-1.1.2.7 · Control.AlgebraAlgebra (Error e) (Either e)Defined in fused-effects-1.1.2.7 · Control.AlgebraMonad m => Algebra (Lift m) (LiftC m)Defined in fused-effects-1.1.2.7 · Control.Carrier.LiftMonoid w => Algebra (Writer w) (Tuple2 w)Defined in fused-effects-1.1.2.7 · Control.AlgebraAlgebra (Reader r) ((->) r)Defined in fused-effects-1.1.2.7 · Control.AlgebraAlgebra sig m => Algebra (Choose :+: sig) (ChooseC m)Defined in fused-effects-1.1.2.7 · Control.Carrier.Choose.ChurchAlgebra sig m => Algebra (Cull :+: (NonDet :+: sig)) (CullC m)Defined in fused-effects-1.1.2.7 · Control.Carrier.Cull.ChurchAlgebra sig m => Algebra (Cut :+: (NonDet :+: sig)) (CutC m)Defined in fused-effects-1.1.2.7 · Control.Carrier.Cut.ChurchAlgebra sig m => Algebra (Empty :+: sig) (EmptyC m)Defined in fused-effects-1.1.2.7 · Control.Carrier.Empty.ChurchAlgebra sig m => Algebra (Empty :+: sig) (EmptyC m)Defined in fused-effects-1.1.2.7 · Control.Carrier.Empty.MaybeAlgebra sig m => Algebra (Empty :+: sig) (MaybeT m)Defined in fused-effects-1.1.2.7 · Control.AlgebraAlgebra sig m => Algebra (Fail :+: sig) (FailC m)Defined in fused-effects-1.1.2.7 · Control.Carrier.Fail.EitherAlgebra sig m => Algebra (Fresh :+: sig) (FreshC m)Defined in fused-effects-1.1.2.7 · Control.Carrier.Fresh.ChurchAlgebra sig m => Algebra (Fresh :+: sig) (FreshC m)Defined in fused-effects-1.1.2.7 · Control.Carrier.Fresh.StrictAlgebra sig m => Algebra (NonDet :+: sig) (NonDetC m)Defined in fused-effects-1.1.2.7 · Control.Carrier.NonDet.ChurchAlgebra sig m => Algebra (Trace :+: sig) (TraceC m)Defined in fused-effects-1.1.2.7 · Control.Carrier.Trace.IgnoringAlgebra sig m => Algebra (Trace :+: sig) (TraceC m)Defined in fused-effects-1.1.2.7 · Control.Carrier.Trace.Returning(MonadIO m, Algebra sig m) => Algebra (Trace :+: sig) (TraceC m)Defined in fused-effects-1.1.2.7 · Control.Carrier.Trace.PrintingAlgebra sig m => Algebra (Error e :+: sig) (ErrorC e m)Defined in fused-effects-1.1.2.7 · Control.Carrier.Error.ChurchAlgebra sig m => Algebra (Error e :+: sig) (ErrorC e m)Defined in fused-effects-1.1.2.7 · Control.Carrier.Error.EitherAlgebra sig m => Algebra (Error e :+: sig) (ExceptT e m)Defined in fused-effects-1.1.2.7 · Control.AlgebraAlgebra sig m => Algebra (Reader r :+: sig) (ReaderC r m)Defined in fused-effects-1.1.2.7 · Control.Carrier.ReaderAlgebra sig m => Algebra (Reader r :+: sig) (ReaderT r m)Defined in fused-effects-1.1.2.7 · Control.AlgebraAlgebra sig m => Algebra (State s :+: sig) (StateC s m)Defined in fused-effects-1.1.2.7 · Control.Carrier.State.ChurchAlgebra sig m => Algebra (State s :+: sig) (StateC s m)Defined in fused-effects-1.1.2.7 · Control.Carrier.State.LazyAlgebra sig m => Algebra (State s :+: sig) (StateC s m)Defined in fused-effects-1.1.2.7 · Control.Carrier.State.StrictAlgebra sig m => Algebra (State s :+: sig) (StateT s m)Defined in fused-effects-1.1.2.7 · Control.AlgebraAlgebra sig m => Algebra (State s :+: sig) (StateT s m)Defined in fused-effects-1.1.2.7 · Control.AlgebraAlgebra sig m => Algebra (Throw e :+: sig) (ThrowC e m)Defined in fused-effects-1.1.2.7 · Control.Carrier.Throw.Either(Algebra sig m, Monoid w) => Algebra (Accum w :+: sig) (AccumC w m)Defined in fused-effects-1.1.2.7 · Control.Carrier.Accum.Church(Algebra sig m, Monoid w) => Algebra (Accum w :+: sig) (AccumC w m)Defined in fused-effects-1.1.2.7 · Control.Carrier.Accum.Strict(Algebra sig m, Monoid w) => Algebra (Accum w :+: sig) (AccumT w m)Defined in fused-effects-1.1.2.7 · Control.Algebra(Algebra sig m, Monoid w) => Algebra (Writer w :+: sig) (WriterC w m)Defined in fused-effects-1.1.2.7 · Control.Carrier.Writer.Church(Algebra sig m, Monoid w) => Algebra (Writer w :+: sig) (WriterT w m)Defined in fused-effects-1.1.2.7 · Control.Algebra(Algebra sig m, Monoid w) => Algebra (Writer w :+: sig) (WriterT w m)Defined in fused-effects-1.1.2.7 · Control.Algebra(Algebra sig m, Monoid w) => Algebra (Writer w :+: sig) (WriterT w m)Defined in fused-effects-1.1.2.7 · Control.Algebra(Algebra sig m, Semigroup w, MonadIO m) => Algebra (Accum w :+: sig) (AccumC w m)Defined in fused-effects-1.1.2.7 · Control.Carrier.Accum.IORef(Monoid w, Algebra sig m) => Algebra (Writer w :+: sig) (WriterC w m)Defined in fused-effects-1.1.2.7 · Control.Carrier.Writer.Strict(MonadIO m, Algebra sig m) => Algebra (State s :+: sig) (StateC s m)Defined in fused-effects-1.1.2.7 · Control.Carrier.State.IORef(Reifies s (Interpreter eff m), Algebra sig m) => Algebra (eff :+: sig) (InterpretC s eff m)Defined in fused-effects-1.1.2.7 · Control.Carrier.InterpretAlgebra (eff :+: sig) (sub m) => Algebra (Labelled label eff :+: sig) (Labelled label sub m)Defined in fused-effects-1.1.2.7 · Control.Effect.Labelled(Algebra sig m, Monoid w) => Algebra (Reader r :+: (Writer w :+: (State s :+: sig))) (RWST r w s m)Defined in fused-effects-1.1.2.7 · Control.Algebra(Algebra sig m, Monoid w) => Algebra (Reader r :+: (Writer w :+: (State s :+: sig))) (RWST r w s m)Defined in fused-effects-1.1.2.7 · Control.Algebra(Algebra sig m, Monoid w) => Algebra (Reader r :+: (Writer w :+: (State s :+: sig))) (RWST r w s m)Defined in fused-effects-1.1.2.7 · Control.Algebra(LabelledMember label sub sig, Algebra sig m) => Algebra (sub :+: sig) (UnderLabel label sub m)Defined in fused-effects-1.1.2.7 · Control.Effect.Labelled
type Has (eff :: (Type -> Type) -> Type -> Type) (sig :: (Type -> Type) -> Type -> Type) (m :: Type -> Type) = (Members eff sig, Algebra sig m)m is a carrier for sig containing eff.
Note that if eff is a sum, it will be decomposed into multiple Member constraints. While this technically allows one to combine multiple unrelated effects into a single Has constraint, doing so has two significant drawbacks:
Due to a problem with recursive type families, this can lead to significantly slower compiles.
It defeats
ghc’s warnings for redundant constraints, and thus can lead to a proliferation of redundant constraints as code is changed.
Run an action exhausted of effects to produce its final result value.