The monad that all effects in this library are based on.
An effectful computation is a value of type `Eff r a`.
In this signature, r is a type-level list of effects that are being
requested and need to be handled inside an effectful computation.
a is the computation's result similar to other monads.
A computation's result can be retrieved via the run function.
However, all effects used in the computation need to be handled by the use
of the effects' run* functions before unwrapping the final result.
For additional details, see the documentation of the effects you are using.
Instances35MonadBase, MonadBaseControl, Monad, Functor, Applicative, Alternative, …
Alternative f => Handle NDet r a (Eff r' (f w))Defined in extensible-effects-5.0.0.1 · Control.Eff.Logic.NDetGiven a callback and NDet requests respond to them. Note that this makes explicit that we rely on
fto have enough room to store all possibilities.Alternative f => Handle NDet r a ([Eff r a] -> Eff r' (f w))Defined in extensible-effects-5.0.0.1 · Control.Eff.Logic.NDetMore performant handler; uses reified job queue
(Monad b, MonadBase b m, Lifted m r) => MonadBase b (Eff r)Defined in extensible-effects-5.0.0.1 · Control.Eff.InternalMonadBase m m => MonadBaseControl m (Eff '[Lift m])Defined in extensible-effects-5.0.0.1 · Control.Eff.Internal(MonadBase m m, LiftedBase m r) => MonadBaseControl m (Eff (Exc e ': r))Defined in extensible-effects-5.0.0.1 · Control.Eff.Exception(MonadBase m m, LiftedBase m r) => MonadBaseControl m (Eff (Fresh ': r))Defined in extensible-effects-5.0.0.1 · Control.Eff.Fresh(MonadBase m m, LiftedBase m r) => MonadBaseControl m (Eff (NDet ': r))Defined in extensible-effects-5.0.0.1 · Control.Eff.Logic.NDet(MonadBase m m, LiftedBase m r) => MonadBaseControl m (Eff (State s ': r))Defined in extensible-effects-5.0.0.1 · Control.Eff.State.Lazy(MonadBase m m, LiftedBase m r) => MonadBaseControl m (Eff (OnDemandState s ': r))Defined in extensible-effects-5.0.0.1 · Control.Eff.State.OnDemand(MonadBase m m, LiftedBase m r) => MonadBaseControl m (Eff (State s ': r))Defined in extensible-effects-5.0.0.1 · Control.Eff.State.Strict(MonadBase m m, LiftedBase m r) => MonadBaseControl m (Eff (Writer w ': r))Defined in extensible-effects-5.0.0.1 · Control.Eff.Writer.Lazy(MonadBase m m, LiftedBase m r) => MonadBaseControl m (Eff (Writer w ': r))Defined in extensible-effects-5.0.0.1 · Control.Eff.Writer.Strict(MonadBase m m, LiftedBase m s) => MonadBaseControl m (Eff (Reader e ': s))Defined in extensible-effects-5.0.0.1 · Control.Eff.Reader.Lazy(MonadBase m m, LiftedBase m s) => MonadBaseControl m (Eff (Reader e ': s))Defined in extensible-effects-5.0.0.1 · Control.Eff.Reader.StrictMonad (Eff r)Defined in extensible-effects-5.0.0.1 · Control.Eff.InternalFunctor (Eff r)Defined in extensible-effects-5.0.0.1 · Control.Eff.InternalApplicative (Eff r)Defined in extensible-effects-5.0.0.1 · Control.Eff.InternalMember NDet r => Alternative (Eff r)Defined in extensible-effects-5.0.0.1 · Control.Eff.Logic.NDet · orphanMember NDet r => MonadPlus (Eff r)Defined in extensible-effects-5.0.0.1 · Control.Eff.Logic.NDet · orphanMapping of NDet requests to MonadPlus. We obey the following laws (taken from the
Backtrand @LogicT papers):mzero >>= f = mzero -- (L1) mzero `mplus` m = m -- (L2) m `mplus` mzero = m -- (L3) m `mplus` (n `mplus` o) = (m `mplus` n) `mplus` o -- (L4) (m `mplus` n) >>= k = (m >>= k) `mplus` (n >>= k) -- (L5)L1is the left-zero law for mzeroL2, L3, L4are theMonoidlaws
NOTE that we do not obey the right-zero law for mzero. Specifically, we do not obey:
m >> mzero = mzero(MonadIO m, Lifted m r) => MonadIO (Eff r)Defined in extensible-effects-5.0.0.1 · Control.Eff.InternalMember NDet r => MSplit (Eff r)Defined in extensible-effects-5.0.0.1 · Control.Eff.Logic.NDet · orphanWe implement LogicT, the non-determinism reflection, of which soft-cut is one instance. See the LogicT paper for an explanation.
Relay (Eff r w) rDefined in extensible-effects-5.0.0.1 · Control.Eff.InternalHandle (Program f) r a (Intrprtr f r' -> Eff r' a)Defined in extensible-effects-5.0.0.1 · Control.Eff.OperationalGiven a continuation and a program, interpret it Usually, we have
r ~ [Program f : r']Handle (Yield a b) (Yield a b ': r) w (Eff r (Y r b a))Defined in extensible-effects-5.0.0.1 · Control.Eff.CoroutineGiven a continuation and a request, respond to it
type StM (Eff '[Lift m]) a = aDefined in extensible-effects-5.0.0.1 · Control.Eff.Internaltype StM (Eff (Exc e ': r)) a = StM (Eff r) (Either e a)Defined in extensible-effects-5.0.0.1 · Control.Eff.Exceptiontype StM (Eff (Fresh ': r)) a = StM (Eff r) (a, Int)Defined in extensible-effects-5.0.0.1 · Control.Eff.Freshtype StM (Eff (NDet ': r)) a = StM (Eff r) [a]Defined in extensible-effects-5.0.0.1 · Control.Eff.Logic.NDettype StM (Eff (Reader e ': s)) a = StM (Eff s) aDefined in extensible-effects-5.0.0.1 · Control.Eff.Reader.Lazytype StM (Eff (Reader e ': s)) a = StM (Eff s) aDefined in extensible-effects-5.0.0.1 · Control.Eff.Reader.Stricttype StM (Eff (State s ': r)) a = StM (Eff r) (a, s)Defined in extensible-effects-5.0.0.1 · Control.Eff.State.Lazytype StM (Eff (OnDemandState s ': r)) a = StM (Eff r) (a, s)Defined in extensible-effects-5.0.0.1 · Control.Eff.State.OnDemandtype StM (Eff (State s ': r)) a = StM (Eff r) (a, s)Defined in extensible-effects-5.0.0.1 · Control.Eff.State.Stricttype StM (Eff (Writer w ': r)) a = StM (Eff r) (a, [w])Defined in extensible-effects-5.0.0.1 · Control.Eff.Writer.Lazytype StM (Eff (Writer w ': r)) a = StM (Eff r) (a, [w])Defined in extensible-effects-5.0.0.1 · Control.Eff.Writer.Strict