We kunnen berekeningen die staat bijhouden voorstellen in Haskell als functies van een staat naar een paar van een resultaat en een nieuwe staat.

data State s a = State (s -> (a, s))

We kunnen dit opnieuw een instantie maken van een monad zoals hieronder weergegeven.

instance Monad (State s)  where
  return a = State $ \s -> (a,s)
  m >>=  k = State $ \s -> let (x,s') = run m s
                            in run (k x) s'

Werk de implementatie van de state monad af en implementeer de gevraagde functies.