Browse Source

Create an fmap function to deal with Maybe

DricomDragon 5 years ago
parent
commit
420e371b2d
1 changed files with 19 additions and 0 deletions
  1. 19 0
      functor.hs

+ 19 - 0
functor.hs

@@ -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)
+
+-- data Maybe a = Nothing | Just a
+
+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)