Well even if (.) can be used with functions returning functions (partially applied), 

calling g . g where g expects 2 args and returns 1 does not seem intuitive.

Could you think of a useful practical example of

(a->a->a) . (a->a->a)

?