data List a = Nil | Cons a (List a) reverse :: List a -> List a reverse l = do reverseAux accum Nil = accum reverseAux accum (Cons h t) = reverseAux (Cons h accum) t reverseAux Nil l main = reverse (Cons (1 :: Integer) (Cons (2 :: Integer) (Cons (3 :: Integer) (Cons (4 :: Integer) Nil)))) -- (Cons 4 (Cons 3 (Cons 2 (Cons 1 Nil))))