
Daniel Fischer wrote:
(v -> w) -> (u -> v) -> u -> w === (v -> w) -> ((u -> v) -> (u -> w))
Feeding it as an argument to the first, we must unify this type with the type of the first (.)'s (first) argument, (b -> c), thus
b = (v -> w) c = (u -> v) -> u -> w
and the type of (.) (.) becomes (a -> b) -> a -> c, which is
(a -> (v -> w)) -> a -> ((u -> v) -> u -> w)
by what we got for b and c.
I started with the same approach but for whatever reason failed to see the "feeding" process so I basically said that b = (v -> w) -> ((u -> v) -> (u -> w)) which, of course, was a dead end. It's interesting that I did not have problems with acknowledging a feeding process with "simple" (for I don't know the proper term) types, e. g. it was clear to me that if I feed f :: (a->b)->c with g :: Integer -> Integer a and b in this case would be Integer in this case. I think I'm not completely used to functions being value, yet. ;) Anyway, thank you very much for helping out (actually to both replies) and in this case also for clarifying. Regards, MoC