module 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