summaryrefslogtreecommitdiff
path: root/files/practicum/StdStateMonad.icl
diff options
context:
space:
mode:
authorMart Lubbers2015-04-24 09:10:46 +0200
committerMart Lubbers2015-04-24 09:10:46 +0200
commitaebffcc1c786e8cea15fff6f324bf71fc37cbb37 (patch)
tree0879f685fc1a35361727a203b437c67bb486e981 /files/practicum/StdStateMonad.icl
parentstarted with week2 (diff)
updated practicum files
Diffstat (limited to 'files/practicum/StdStateMonad.icl')
-rw-r--r--files/practicum/StdStateMonad.icl16
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