Type equivalence

Result still can look dirty though, since the type
((λ T * (→ T T)) int) does not get simplified to
(→ int int).