で、がんばる

http://d.hatena.ne.jp/notfound/20050903
http://d.hatena.ne.jp/nuc/20050906/p2
説明ありがとうございます。
自分の理解力がものすごく足りない気がしてしまう。
熟読・・・。

現状の理解
fun1 a = a + 1
fun2 a b = a * b

fun1 . fun2
がダメなのはfun1はaをほしがってるのに、fun2はa->aを返しちゃうから。
fun2.fun1ならfun2はa->(a->a)でaをほしがってて、fun1もa->aで期待通りaを渡してくれるからOK。
であれば、fun1が(a->a)->aであるならfun2も渡せる、はず?

で、やってみる。
fun1::(Int->Int)->Int
fun1 a = a 100 + 1
fun2 a b = a * b
で(fun1 . fun2)3
>301
おお。いけた。

しかしまた疑問が生まれる。
関数がcurry化されてるとどんなメリットがあるんだろう・・・?