summaryrefslogtreecommitdiff
path: root/paper/While/Simple.icl
diff options
context:
space:
mode:
authorCamil Staps2016-05-10 21:26:34 +0200
committerCamil Staps2016-05-10 21:26:34 +0200
commit200d22269bdaaba0666962f5f0099faae26d7bf4 (patch)
tree73b7ea4bdc8820cc8fa92fa8eddf8656fd679b73 /paper/While/Simple.icl
parentStraightforward While lexer, parser and interpreter (diff)
lint; cleanup While
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