data List a = Nil | Cons a (List a) build :: (forall l. l -> (a -> l -> l) -> l) -> List a build f = f Nil Cons main = build (\nil cons -> cons (1 :: Integer) (cons (2 :: Integer) nil)) -- (Cons 1 (Cons 2 Nil))