Safe Haskell | None |
---|
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.
:: 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