Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module Calc where
- import ExprT
- import Parser
- eval::ExprT -> Integer
- eval (Lit a) = a
- eval (Add exp1 exp2) = eval exp1 + eval exp2
- eval (Mul exp1 exp2) = eval exp1 * eval exp2
- evalStr :: String -> Maybe Integer
- evalStr str = case (parseExp Lit Add Mul str) of
- Nothing -> Nothing
- Just exp -> Just (eval exp)
- class Expr a where
- lit :: Integer -> a
- add, mul :: a -> a -> a
- instance Expr ExprT where
- lit a = Lit a
- mul a b = Mul a b
- add a b = Add a b
- instance Expr Integer where
- lit a = a
- mul a b = a * b
- add a b = a + b
- newtype MinMax = MinMax Integer deriving (Eq, Show)
- instance Expr MinMax where
- lit a = MinMax a
- mul (MinMax a) (MinMax b) = if (a < b) then MinMax a else MinMax b
- add (MinMax a) (MinMax b) = if (a > b) then MinMax a else MinMax b
- newtype Mod7 = Mod7 Integer deriving (Eq, Show)
- instance Expr Mod7 where
- lit a = Mod7 (a `mod` 7)
- mul (Mod7 a) (Mod7 b) = Mod7 ((a*b) `mod` 7)
- add (Mod7 a) (Mod7 b) = Mod7 ((a+b) `mod` 7)
Advertisement
Add Comment
Please, Sign In to add comment