summaryrefslogtreecommitdiff
path: root/paper/While/Simple.icl
diff options
context:
space:
mode:
authorCamil Staps2016-06-03 00:39:37 +0200
committerCamil Staps2016-06-03 00:39:37 +0200
commit6ecadcb8571712536f9d121264f67f30f7bb0147 (patch)
tree0542e10ca752f538195095713ca786ab494335b6 /paper/While/Simple.icl
parentUpdate example program (diff)
First version almost finished
Diffstat (limited to 'paper/While/Simple.icl')
-rw-r--r--paper/While/Simple.icl13
1 files changed, 7 insertions, 6 deletions
diff --git a/paper/While/Simple.icl b/paper/While/Simple.icl
index 4c226c9..7ef042f 100644
--- a/paper/While/Simple.icl
+++ b/paper/While/Simple.icl
@@ -15,15 +15,16 @@ where
instance run Stm
where
- run (Ass v e) st
- = pure (\w -> if (w==v) (eval e st) (st w))
- run (If b s1 s2) st
+ run :: Stm State -> Either Error State
+ run (Ass v e) st // Assign e to v
+ = pure (\w -> if (w == v) (eval e st) (st w))
+ run (If b s1 s2) st // If b then s1 else s2
= eval b st >>= \r -> run (if r s1 s2) st
- run w=:(While b s) st
+ run w=:(While b s) st // While b do s
= eval b st >>= \r -> if r
(run s st >>= run w)
(pure st)
- run Skip st
+ run Skip st // Skip
= pure st
- run (Compose s1 s2) st
+ run (Compose s1 s2) st // s1 ; s2
= run s1 st >>= run s2