rendered paste bodymodule Overload where
--12.8
--instance (Ord a, Ord b) => Ord (a,b) where
--max, min :: a-> a -> a
--instance Ord b => Ord [b] where
--14.16 + 14.17
data Expr = Lit Int | Add Expr Expr | Sub Expr Expr | Mul Expr Expr | Div Expr Expr
eval :: Expr -> Int
eval (Lit n) = n
eval (Add e1 e2) = (eval e1) + (eval e2)
eval (Sub e1 e2) = (eval e1) - (eval e2)
eval (Mul e1 e2) = (eval e1) * (eval e2)
eval (Div e1 e2) = div (eval e1) (eval e2)
size :: Expr -> Int
size (Lit n) = 0
size (Add e1 e2) = 1 + size (e1) + size (e2)
size (Sub e1 e2) = 1 + size (e1) + size (e2)
size (Mul e1 e2) = 1 + size (e1) + size (e2)
size (Div e1 e2) = 1 + size (e1) + size (e2)
--14.17