Bird 1.6.3 requires deducing type signatures for the functions "strange" and "stranger."

Are my solutions below correct?

(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.


Hotmail is redefining busy with tools for the New Busy. Get more from your inbox. See how.