diff options
Diffstat (limited to 'paper/While/Simple.icl')
-rw-r--r-- | paper/While/Simple.icl | 13 |
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 |