diff options
author | Camil Staps | 2016-02-02 19:24:50 +0100 |
---|---|---|
committer | Camil Staps | 2016-02-02 19:24:50 +0100 |
commit | a7d7542dc646a5fd124ef71e71ce260889f1701b (patch) | |
tree | 04ed89503bbb3cc9933273a1326a53ca724c3492 /1415/files/practicum/StdStateMonad.icl | |
parent | week6 camil: working positioning of lines by putting empties at left and righ... (diff) |
Diffstat (limited to '1415/files/practicum/StdStateMonad.icl')
-rw-r--r-- | 1415/files/practicum/StdStateMonad.icl | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/1415/files/practicum/StdStateMonad.icl b/1415/files/practicum/StdStateMonad.icl new file mode 100644 index 0000000..527ac5c --- /dev/null +++ b/1415/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
|