DA.Action.State.Class¶
DA.Action.State.Class
Typeclasses¶
class ActionState s m where
Action
m
has a state variable of types
.Rules:
get *> ma = ma
ma <* get = ma
put a >>= get = put a $> a
put a *> put b = put b
(,) <$> get <*> get = get <&> \a -> (a, a)
Informally, these rules mean it behaves like an ordinary assignable variable: it doesn’t magically change value by looking at it, if you put a value there that’s always the value you’ll get if you read it, assigning a value but never reading that value has no effect, and so on.
- get
: m s
Fetch the current value of the state variable.
- put
: s -> m ()
Set the value of the state variable.
- modify
: (s -> s) -> m ()
Modify the state variable with the given function.
default modify
: Action m => (s -> s) -> m ()instance ActionState s (State s)