|
@@ -8,3 +8,22 @@ evaluate (Inc e) = 1 + evaluate e
|
|
|
evaluate (Dec e) = (evaluate e) - 1
|
|
|
evaluate (Inv e) = 1 / (evaluate e)
|
|
|
evaluate (Neg e) = negate (evaluate e)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+isZero::Maybe a -> Bool
|
|
|
+isZero m = case m of
|
|
|
+ Nothing -> True
|
|
|
+ _ -> False
|
|
|
+
|
|
|
+mfmap::(Fractional a) => (a -> b) -> Maybe a -> Maybe b
|
|
|
+mfmap f m = case m of
|
|
|
+ Nothing -> Nothing
|
|
|
+ Just x -> Just (f x)
|
|
|
+
|
|
|
+safeval::(Fractional a) => Expr a -> Maybe a
|
|
|
+safeval (Val x) = Just x
|
|
|
+safeval (Inc e) = mfmap (+ 1) (safeval e)
|
|
|
+safeval (Dec e) = mfmap (subtract 1) (safeval e)
|
|
|
+safeval (Inv e) = mfmap (1 /) (safeval e)
|
|
|
+safeval (Neg e) = mfmap negate (safeval e)
|