| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Control.Effect.State.Labelled
Contents
Description
Labelled State operations.
Since: 1.0.2.0
Synopsis
- data State s (m :: Type -> Type) k
- get :: forall label s m sig. HasLabelled label (State s) sig m => m s
- gets :: forall label s m a sig. HasLabelled label (State s) sig m => (s -> a) -> m a
- put :: forall label s m sig. HasLabelled label (State s) sig m => s -> m ()
- modify :: forall label s m sig. HasLabelled label (State s) sig m => (s -> s) -> m ()
- modifyLazy :: forall label s m sig. HasLabelled label (State s) sig m => (s -> s) -> m ()
- state :: forall label s m a sig. HasLabelled label (State s) sig m => (s -> (s, a)) -> m a
- class Monad m => Algebra sig m | m -> sig
- type Has eff sig m = (Members eff sig, Algebra sig m)
- type HasLabelled label eff sig m = (LabelledMember label eff sig, Algebra sig m)
- run :: Identity a -> a
State effect
data State s (m :: Type -> Type) k Source #
Since: 0.1.0.0
Instances
| Algebra sig m => Algebra (State s :+: sig) (StateT s m) Source # | |
| Algebra sig m => Algebra (State s :+: sig) (StateT s m) Source # | |
| Algebra sig m => Algebra (State s :+: sig) (StateC s m) Source # | |
| Algebra sig m => Algebra (State s :+: sig) (StateC s m) Source # | |
| Algebra sig m => Algebra (State s :+: sig) (StateC s m) Source # | |
| (MonadIO m, Algebra sig m) => Algebra (State s :+: sig) (StateC s m) Source # | |
| (Algebra sig m, Monoid w) => Algebra (Reader r :+: (Writer w :+: (State s :+: sig))) (RWST r w s m) Source # | |
| (Algebra sig m, Monoid w) => Algebra (Reader r :+: (Writer w :+: (State s :+: sig))) (RWST r w s m) Source # | |
| (Algebra sig m, Monoid w) => Algebra (Reader r :+: (Writer w :+: (State s :+: sig))) (RWST r w s m) Source # | |
get :: forall label s m sig. HasLabelled label (State s) sig m => m s Source #
Get the current state value.
runState a (runLabelledlabel (label)get>>=k) = runState a (k a)
Since: 1.0.2.0
gets :: forall label s m a sig. HasLabelled label (State s) sig m => (s -> a) -> m a Source #
put :: forall label s m sig. HasLabelled label (State s) sig m => s -> m () Source #
Replace the state value with a new value.
runState a (runLabelledlabel (label b)put>>m) = runState b m
Since: 1.0.2.0
modify :: forall label s m sig. HasLabelled label (State s) sig m => (s -> s) -> m () Source #
modifyLazy :: forall label s m sig. HasLabelled label (State s) sig m => (s -> s) -> m () Source #
Replace the state value with the result of applying a function to the current state value. This is lazy in the new state; injudicious use of this function may lead to space leaks.
modifyLazyf =get>>=put. f
Since: 1.0.2.0
state :: forall label s m a sig. HasLabelled label (State s) sig m => (s -> (s, a)) -> m a Source #
Re-exports
class Monad m => Algebra sig m | m -> sig Source #
The class of carriers (results) for algebras (effect handlers) over signatures (effects), whose actions are given by the alg method.
Since: 1.0.0.0
Minimal complete definition
Instances
| Algebra Choose NonEmpty Source # | |
| Algebra Empty Maybe Source # | |
| Algebra NonDet [] Source # | |
| Algebra sig m => Algebra sig (Choosing m) Source # | |
| Algebra sig m => Algebra sig (Alt m) Source # | This instance permits effectful actions to be lifted into the a <|> b <|> c <|> d is equivalent to getAlt (mconcat [a, b, c, d]) Since: 1.0.1.0 |
| Algebra sig m => Algebra sig (Ap m) Source # | This instance permits effectful actions to be lifted into the mappend <$> act1 <*> (mappend <$> act2 <*> act3) is equivalent to getAp (act1 <> act2 <> act3) Since: 1.0.1.0 |
| Algebra sig m => Algebra sig (IdentityT m) Source # | |
| Algebra (Lift IO) IO Source # | |
| Algebra (Lift Identity) Identity Source # | |
| Monad m => Algebra (Lift m) (LiftC m) Source # | |
| Algebra (Error e) (Either e) Source # | |
| Monoid w => Algebra (Writer w) ((,) w) Source # | |
| Algebra (Reader r) ((->) r :: Type -> Type) Source # | |
| Algebra sig m => Algebra (Choose :+: sig) (ChooseC m) Source # | |
| Algebra sig m => Algebra (Empty :+: sig) (MaybeT m) Source # | |
| Algebra sig m => Algebra (Empty :+: sig) (EmptyC m) Source # | |
| Algebra sig m => Algebra (Empty :+: sig) (EmptyC m) Source # | |
| Algebra sig m => Algebra (NonDet :+: sig) (NonDetC m) Source # | |
| (MonadIO m, Algebra sig m) => Algebra (Trace :+: sig) (TraceC m) Source # | |
| Algebra sig m => Algebra (Trace :+: sig) (TraceC m) Source # | |
| Algebra sig m => Algebra (Trace :+: sig) (TraceC m) Source # | |
| Algebra sig m => Algebra (Fail :+: sig) (FailC m) Source # | |
| Algebra sig m => Algebra (Fresh :+: sig) (FreshC m) Source # | |
| Algebra sig m => Algebra (Fresh :+: sig) (FreshC m) Source # | |
| Algebra sig m => Algebra (Cut :+: (NonDet :+: sig)) (CutC m) Source # | |
| Algebra sig m => Algebra (Cull :+: (NonDet :+: sig)) (CullC m) Source # | |
| (Algebra sig m, Monoid w) => Algebra (Accum w :+: sig) (AccumT w m) Source # | |
| (Algebra sig m, Monoid w) => Algebra (Accum w :+: sig) (AccumC w m) Source # | |
| (Algebra sig m, Semigroup w, MonadIO m) => Algebra (Accum w :+: sig) (AccumC w m) Source # | |
| (Algebra sig m, Monoid w) => Algebra (Accum w :+: sig) (AccumC w m) Source # | |
| Algebra sig m => Algebra (Reader r :+: sig) (ReaderT r m) Source # | |
| Algebra sig m => Algebra (Reader r :+: sig) (ReaderC r m) Source # | |
| Algebra sig m => Algebra (State s :+: sig) (StateT s m) Source # | |
| Algebra sig m => Algebra (State s :+: sig) (StateT s m) Source # | |
| Algebra sig m => Algebra (State s :+: sig) (StateC s m) Source # | |
| Algebra sig m => Algebra (State s :+: sig) (StateC s m) Source # | |
| Algebra sig m => Algebra (State s :+: sig) (StateC s m) Source # | |
| (MonadIO m, Algebra sig m) => Algebra (State s :+: sig) (StateC s m) Source # | |
| Algebra sig m => Algebra (Throw e :+: sig) (ThrowC e m) Source # | |
| Algebra sig m => Algebra (Error e :+: sig) (ExceptT e m) Source # | |
| Algebra sig m => Algebra (Error e :+: sig) (ErrorC e m) Source # | |
| Algebra sig m => Algebra (Error e :+: sig) (ErrorC e m) Source # | |
| (Algebra sig m, Monoid w) => Algebra (Writer w :+: sig) (WriterT w m) Source # | |
| (Algebra sig m, Monoid w) => Algebra (Writer w :+: sig) (WriterT w m) Source # | |
| (Algebra sig m, Monoid w) => Algebra (Writer w :+: sig) (WriterT w m) Source # | |
| (Monoid w, Algebra sig m) => Algebra (Writer w :+: sig) (WriterC w m) Source # | |
| (Algebra sig m, Monoid w) => Algebra (Writer w :+: sig) (WriterC w m) Source # | |
| (Reifies s (Interpreter eff m), Algebra sig m) => Algebra (eff :+: sig) (InterpretC s eff m) Source # | |
Defined in Control.Carrier.Interpret Methods alg :: forall ctx (n :: Type -> Type) a. Functor ctx => Handler ctx n (InterpretC s eff m) -> (eff :+: sig) n a -> ctx () -> InterpretC s eff m (ctx a) Source # | |
| (LabelledMember label sub sig, Algebra sig m) => Algebra (sub :+: sig) (UnderLabel label sub m) Source # | |
Defined in Control.Effect.Labelled Methods alg :: forall ctx (n :: Type -> Type) a. Functor ctx => Handler ctx n (UnderLabel label sub m) -> (sub :+: sig) n a -> ctx () -> UnderLabel label sub m (ctx a) Source # | |
| (Algebra sig m, Monoid w) => Algebra (Reader r :+: (Writer w :+: (State s :+: sig))) (RWST r w s m) Source # | |
| (Algebra sig m, Monoid w) => Algebra (Reader r :+: (Writer w :+: (State s :+: sig))) (RWST r w s m) Source # | |
| (Algebra sig m, Monoid w) => Algebra (Reader r :+: (Writer w :+: (State s :+: sig))) (RWST r w s m) Source # | |
| Algebra (eff :+: sig) (sub m) => Algebra (Labelled label eff :+: sig) (Labelled label sub m) Source # | |
type Has eff sig m = (Members eff sig, Algebra sig m) Source #
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.
Since: 1.0.0.0
type HasLabelled label eff sig m = (LabelledMember label eff sig, Algebra sig m) Source #
m is a carrier for sig containing eff associated with label.
Note that if eff is a sum, it will not be decomposed into multiple LabelledMember constraints. While this technically is possible, it results in unsolvable constraints, as the functional dependencies in Labelled prevent assocating the same label with multiple distinct effects within a signature.
Since: 1.0.2.0