The interface for accessing and changing the state component.
Multi parameter classes and functional dependencies are required.
Methods
changeState :: (s -> b -> s) -> a b bchange the state of a state arrow by applying a function for computing a new state from the old and the arrow input. Result is the arrow input
accessState :: (s -> b -> c) -> a b caccess the state with a function using the arrow input as data for selecting state components.
getState :: a b sread the complete state, ignore arrow input
definition:
getState = accessState (\ s x -> s)setState :: a s soverwrite the old state
definition:
setState = changeState (\ s x -> x)nextState :: (s -> s) -> a b schange state (and ignore input) and return new state
convenience function, usefull for generating e.g. unique identifiers:
example with SLA state list arrows
newId :: SLA Int b String newId = nextState (+1) >>> arr (('#':) . show) runSLA 0 (newId <+> newId <+> newId) undefined = ["#1", "#2", "#3"]
Instances2ArrowState
ArrowState s (IOSLA s)Defined in hxt-9.3.1.22 · Control.Arrow.IOStateListArrowArrowState s (SLA s)Defined in hxt-9.3.1.22 · Control.Arrow.StateListArrow