hw5: exercise 4
authorRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Sun, 21 Dec 2014 12:30:36 +0000 (18:00 +0530)
committerRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Sun, 21 Dec 2014 12:30:36 +0000 (18:00 +0530)
hw5/Calc.hs

index 46f782018c617ae69a0bb440c77af5a753d1cbed..3d8dd9bca09076a422a4fa66a890568997151402 100644 (file)
@@ -28,3 +28,31 @@ instance Expr ExprT where
   lit = Lit
   add = Add
   mul = Mul
+
+reify :: ExprT -> ExprT
+reify = id
+
+instance Expr Integer where
+  lit = id
+  add = (+)
+  mul = (-)
+
+instance Expr Bool where
+  lit x | x <= 0 = False
+        | otherwise = True
+  add = (||)
+  mul = (&&)
+
+newtype MinMax = MinMax Integer deriving (Show, Eq)
+
+instance Expr MinMax where
+  lit = MinMax
+  add (MinMax x) (MinMax y) = MinMax (max x y)
+  mul (MinMax x) (MinMax y) = MinMax (min x y)
+
+newtype Mod7 = Mod7 Integer deriving (Show, Eq)
+
+instance Expr Mod7 where
+  lit x = Mod7 (x `mod` 7)
+  add (Mod7 x) (Mod7 y) = Mod7 ((x+y) `mod` 7)
+  mul (Mod7 x) (Mod7 y) = Mod7 ((x*y) `mod` 7)