| hxt-8.5.4: A collection of tools for processing XML with Haskell. | Source code | Contents | Index
Control.Arrow.ArrowState |
Portability | multy parameter classes and functional depenedencies required
Stability | experimental
Maintainer | Uwe Schmidt (uwe\@fh-wedel.de)
Description
Arrows for managing an explicit state State arrows work similar to state monads. A state value is threaded through the application of arrows.
Synopsis
class Arrow a => ArrowState s a | a -> s where
changeState :: (s -> b -> s) -> a b b
accessState :: (s -> b -> c) -> a b c
getState :: a b s
setState :: a s s
nextState :: (s -> s) -> a b s
Documentation
class Arrow a => ArrowState s a | a -> s where | Source
The interface for accessing and changing the state component. Multi parameter classes and functional dependencies are required.
Methods
changeState :: (s -> b -> s) -> a b b | Source
change 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 c | Source
access the state with a function using the arrow input as data for selecting state components.
getState :: a b s | Source
read the complete state, ignore arrow input definition: `getState = accessState (\ s x -> s)`
setState :: a s s | Source
overwrite the old state definition: `setState = changeState (\ s x -> x)`
nextState :: (s -> s) -> a b s | Source
change 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"]
Instances
ArrowState s (SLA s)
ArrowState s (IOSLA s)
Produced by Haddock version 2.4.2