summaryrefslogtreecommitdiff
path: root/files/practicum/StdStateMonad.icl
blob: 527ac5ca81abca90a0f1084af87872922ade47b8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
implementation module StdStateMonad

import StdMonad

:: ST s a = ST (s -> (a, s))

instance return (ST s) where return x     = ST (\w = (x, w))
instance >>=    (ST s) where >>= (ST f) g = ST (\w = let (a, w1) = f w 
                                                      in unST (g a) w1
                                               )

mkST :: (s -> (a,s)) -> ST s a
mkST f = ST f

unST :: (ST s a) -> s -> (a, s)
unST (ST f) = f