updated practicum files
[fp1415.git] / files / practicum / StdStateMonad.icl
1 implementation module StdStateMonad
2
3 import StdMonad
4
5 :: ST s a = ST (s -> (a, s))
6
7 instance return (ST s) where return x = ST (\w = (x, w))
8 instance >>= (ST s) where >>= (ST f) g = ST (\w = let (a, w1) = f w
9 in unST (g a) w1
10 )
11
12 mkST :: (s -> (a,s)) -> ST s a
13 mkST f = ST f
14
15 unST :: (ST s a) -> s -> (a, s)
16 unST (ST f) = f