Haskell Xml Toolbox 7.5: The Arrow APISource codeContentsIndex
Control.Arrow.ArrowState
Portabilityportable
Stabilityexperimental
MaintainerUwe Schmidt (uwe\@fh-wedel.de)
Description

Version : $Id: ArrowState.hs,v 1.5 20050902 17:09:39 hxml Exp $

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

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
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
access the state with a function using the arrow input as data for selecting state components.
getState :: a b s

read the complete state, ignore arrow input

definition: getState = accessState (\ s x -> s)

setState :: a s s

overwrite the old state

definition: setState = changeState (\ s x -> x)

nextState :: (s -> s) -> a b s

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"]
show/hide Instances
Produced by Haddock version 0.8