Control.Arrow.ArrowState

hxt-9.3.1.16: A collection of tools for processing XML with Haskell.

Copyright | Copyright (C) 2005 Uwe Schmidt
License | MIT
Maintainer | Uwe Schmidt (uwe\@fh-wedel.de)
Stability | experimental
Portability | multi parameter classes and functional depenedencies required
Safe Haskell | Safe
Language | Haskell98

Control.Arrow.ArrowState

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

# 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.

Minimal complete definition

changeState, accessState

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"]

Instances

ArrowState s (SLA s) # |
Methods changeState :: (s -> b -> s) -> SLA s b b # accessState :: (s -> b -> c) -> SLA s b c # getState :: SLA s b s # setState :: SLA s s s # nextState :: (s -> s) -> SLA s b s #
ArrowState s (IOSLA s) # |
Methods changeState :: (s -> b -> s) -> IOSLA s b b # accessState :: (s -> b -> c) -> IOSLA s b c # getState :: IOSLA s b s # setState :: IOSLA s s s # nextState :: (s -> s) -> IOSLA s b s #