evalb (Not a) = not o evalb a
evalb (WBool e) = evalb e
+instance print WhileExpr
+where
+ print (i =. v) = i +++ " := " +++ print v
+ print (If b _ t _ e) = "If " +++ print b +++ " then " +++ print t +++ " else " +++ print e
+ print (a :. b) = print a +++ "; " +++ print b
+ print x=:(While b _ e) = "While " +++ print b +++ " do " +++ print e
+ print Skip = "Skip"
+ print (WExpr e) = print e
+
+instance print WhileInt
+where
+ print (Int i) = toString i
+ print (Var s) = s
+ print (a +. b) = print a +++ " + " +++ print b
+ print (WInt e) = print e
+
+instance print WhileBool
+where
+ print (Bool b) = toString b
+ print (a ==. b) = print a +++ " = " +++ print b
+ print (a &. b) = print a +++ " && " +++ print b
+ print (Not a) = "!" +++ print a
+ print (WBool e) = print e
+
Start = (eval ("a" =. Int 42 :. While (Bool False) Do ("b" =. Int 4)) emptyGamma) "a"