diff options
Diffstat (limited to 'files/practicum/StdStateMonad.icl')
-rw-r--r-- | files/practicum/StdStateMonad.icl | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/files/practicum/StdStateMonad.icl b/files/practicum/StdStateMonad.icl new file mode 100644 index 0000000..527ac5c --- /dev/null +++ b/files/practicum/StdStateMonad.icl @@ -0,0 +1,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
|