data Bool = False | True data List a = Nil | Cons a (List a) isNil :: List a -> Bool isNil Nil = True isNil (Cons _ _) = False map :: (a -> b) -> List a -> List b map _ Nil = Nil map f (Cons x l) = Cons (f x) (map f l)