I tried translating (if t (lambda (x) x) (lambda (x) (first x))) into Haskell, can't find a way to do it: Prelude> (if True then (\x -> x) else (\x -> fst x))
<interactive>:1:36:
Occurs check: cannot construct the infinite type: a = (a, b)
Expected type: (a, b)
Inferred type: a
In the expression: fst x
In the expression: (\ x -> fst x)