Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Bluefin.StateSource
Synopsis
- data StateSource (e :: Effects)
- withStateSource :: forall (es :: Effects) a. (forall (e :: Effects). StateSource e -> Eff (e :& es) a) -> Eff es a
- newState :: forall (e :: Effects) s (es :: Effects). StateSource e -> s -> Eff es (State s e)
Documentation
A StateSource
allows you to allocate new
State
handles, much like ST
allows you to allocate new STRef
s. This can be
useful when you want to avoid nested runState
(or evalState
) blocks, or you need a number
of mutable states that is only dynamically known.
Handle
data StateSource (e :: Effects) #
Handle to a capability to create strict mutable state handles
Handlers
Arguments
:: forall (es :: Effects) a. (forall (e :: Effects). StateSource e -> Eff (e :& es) a) | |
-> Eff es a | ͘ |
runPureEff
$withStateSource
$ \source -> do n <-newState
source 5 total <- newState source 0withJump
$ \done -> forever $ do n' <-get
nmodify
total (+ n') when (n' == 0) $jumpTo
done modify n (subtract 1) get total 15
Effectful operations
Arguments
:: forall (e :: Effects) s (es :: Effects). StateSource e | |
-> s | The initial value for the state handle |
-> Eff es (State s e) | A new state handle |