summaryrefslogtreecommitdiff
path: root/paper/While/Simple.icl
diff options
context:
space:
mode:
Diffstat (limited to 'paper/While/Simple.icl')
-rw-r--r--paper/While/Simple.icl17
1 files changed, 12 insertions, 5 deletions
diff --git a/paper/While/Simple.icl b/paper/While/Simple.icl
index 9138f1f..84ffce7 100644
--- a/paper/While/Simple.icl
+++ b/paper/While/Simple.icl
@@ -15,8 +15,15 @@ where
instance run Stm
where
- run (Ass v e) st = eval e st >>= \r -> pure (\w -> if (w==v) (pure r) (st w))
- run (If b s1 s2) st = eval b st >>= \r -> run (if r s1 s2) st
- run w=:(While b s) st = eval b st >>= \r -> if r (run s st >>= \st` -> run w st`) (pure st)
- run Skip st = pure st
- run (Compose s1 s2) st = run s1 st >>= \st` -> run s2 st`
+ run (Ass v e) st
+ = eval e st >>= \r -> pure (\w -> if (w==v) (pure r) (st w))
+ run (If b s1 s2) st
+ = eval b st >>= \r -> run (if r s1 s2) st
+ run w=:(While b s) st
+ = eval b st >>= \r -> if r
+ (run s st >>= \st` -> run w st`)
+ (pure st)
+ run Skip st
+ = pure st
+ run (Compose s1 s2) st
+ = run s1 st >>= run s2