freer-effects- Implementation of effect system for Haskell.

Copyright(c) 2016 Allele Dev; 2017 Ixperta Solutions s.r.o.
PortabilityGHC specific language extensions.
Safe HaskellNone




Composable handler for State effects. Handy for passing an updatable state through a computation.

Some computations may not require the full power of State effect:

Using as a starting point.


State Effect

data State s a where Source #

Strict State effects: one can either Get values or Put them.


Get :: State s s 
Put :: !s -> State s () 

State Operations

get :: Member (State s) effs => Eff effs s Source #

Retrieve the current value of the state of type s :: *.

put :: Member (State s) effs => s -> Eff effs () Source #

Set the current state to a specified value of type s :: *.

modify :: Member (State s) effs => (s -> s) -> Eff effs () Source #

Modify the current state of type s :: * using provided function (s -> s).

State Handlers

runState :: Eff (State s ': effs) a -> s -> Eff effs (a, s) Source #

Handler for State effects.

evalState :: Eff (State s ': effs) a -> s -> Eff effs a Source #

Run a State effect, discarding the final state.

execState :: Eff (State s ': effs) a -> s -> Eff effs s Source #

Run a State effect, returning only the final state.

State Utilities

transactionState :: forall s effs a. Member (State s) effs => Proxy s -> Eff effs a -> Eff effs a Source #

An encapsulated State handler, for transactional semantics. The global state is updated only if the transactionState finished successfully.