data List a = Nil | Cons a (List a) first :: List Integer -> Integer //first Nil = 0 :: Integer first (Cons x _) = x reverse :: List a -> List a reverse l = reverseAux Nil l where reverseAux accum Nil = accum reverseAux accum (Cons h t) = reverseAux (Cons h accum) t main :: Integer main = first (reverse l) where l = Cons (1 :: Integer) (Cons (2 :: Integer) (Cons (3 :: Integer) Nil)) -- 3