std.state

The state monad.

Types

type State s a = s -> { value : a, state : s }

Values

#[implicit]
let applicative : forall s . Applicative (State s)

A Functor with application.

The following laws should hold:

  • wrap id <*> v = v
  • wrap (<<) <*> u <*> v <*> w = u <*> (v <*> w)
  • wrap f <*> wrap x = wrap (f x)
  • u <*> wrap y = wrap (\g -> g x) <*> u

#[implicit]
let functor : forall s . Functor (State s)

A Functor represents an action on a parameterized type which does not change the structure with the mapped type.

The following laws should hold:

  • map id == id
  • map (f << g) == map f << map g

#[implicit]
let monad : forall s . Monad (State s)

A generalised interface for imperatively sequencing actions

let put value : forall s . s -> State s ()

let get : forall s . State s s

let modify f : forall s . (s -> s) -> State s ()

let runState f state : forall a s . State s a -> s -> { value : a, state : s }

let evalState f state : forall a s . State s a -> s -> a

let execState f state : forall a s . State s a -> s -> s