| Safe Haskell | None |
|---|
Control.Eff.State
Contents
Description
Strict state effect
Example: implementing Fresh
runFresh' :: (Typeable i, Enum i, Num i) => Eff (Fresh i :> r) w -> i -> Eff r w
runFresh' m s = fst <$> runState s (loop $ admin m)
where
loop (Val x) = return x
loop (E u) = case decomp u of
Right (Fresh k) -> do
n <- getState
putState (n + 1)
loop (k n)
Left u' -> send (\k -> unsafeReUnion $ k <$> u') >>= loop
- data State s w
- getState :: Typeable e => Member (State e) r => Eff r e
- putState :: Typeable e => Member (State e) r => e -> Eff r ()
- onState :: (Typeable s, Member (State s) r) => (s -> s) -> Eff r ()
- runState :: Typeable s => s -> Eff (State s :> r) w -> Eff r (s, w)
- data Reader e v
- getReader :: (Typeable e, Member (Reader e) r) => Eff r e
- runReader :: Typeable e => Eff (Reader e :> r) w -> e -> Eff r w
- local :: (Typeable e, Member (Reader e) r) => (e -> e) -> Eff r a -> Eff r a
- data Writer e v
- putWriter :: (Typeable e, Member (Writer e) r) => e -> Eff r ()
- runWriter :: Typeable e => Eff (Writer e :> r) w -> Eff r (Maybe e, w)
- runPusher :: Typeable e => Eff (Writer e :> r) w -> Eff r ([e], w)
Read-write State
onState :: (Typeable s, Member (State s) r) => (s -> s) -> Eff r ()Source
Transform the state with a function.
Arguments
| :: Typeable s | |
| => s | Initial state |
| -> Eff (State s :> r) w | Effect incorporating State |
| -> Eff r (s, w) | Effect containing final state and a return value |
Run a State effect.
Reader
The request for a value of type e from the current environment. This environment is analogous to a parameter of type e.
runReader :: Typeable e => Eff (Reader e :> r) w -> e -> Eff r wSource
The handler of Reader requests. The return type shows that all Reader requests are fully handled.
local :: (Typeable e, Member (Reader e) r) => (e -> e) -> Eff r a -> Eff r aSource
Locally rebind the value in the dynamic environment. This function both requests and admins Reader requests.
Writer
The request to remember a value of type e in the current environment