implementation module Simple import StdString import WhileCommon import Common instance toString Stm where toString (Ass v a) = v <+ " := " <+ a toString (If b s1 s2) = "if " <+ b <+ " then " <+ s1 <+ " else " <+ s2 toString (While b s) = "while " <+ b <+ " do " <+ s toString Skip = "skip" toString (Compose s1 s2) = s1 <+ "; " <+ s2 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 = 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 >>= run w) (pure st) run Skip st = pure st run (Compose s1 s2) st = run s1 st >>= run s2