(i) strange f g = g (f g)
Assume g :: a -> b. Then f :: (a -> b) -> c. But since g :: a -> b,
f g :: a, so c = a. Therefore, f :: (a -> b) -> a, and g (f g) :: a.
Therefore, strange :: ((a -> b) -> a) -> (a -> b) -> a.
(ii) stranger f = f f
Assume f :: a -> b. Since "f f" is well-typed, type unification requires
a = b. Therefore, f :: a -> a, and stranger :: (a -> a) -> a.