関数適用の左結合性
関数適用の左結合性とは?
A Gentle Introduction to Haskell: Functionsを読む.
add (x,y) = x + y関数 add の適用は add e1 e2 という形式になります。これは、 (add e1) e2 と同等の式 です。なぜかというと関数適用は左結合性をもつからです。いいかえ れば、関数 add を最初の引数に適用すると、新しい関数ができて、こ れをふたつめの引数に適用するということです。
あー,コレって学習曲線で伸び悩む,あの辺なんだろうか.まだそんなとこまで行ってるとは思えないが.ただ俺が頭悪いだけかorz
とりあえずそれは置いといて.
ということは,課題で考えると
g = (*)
に於いて,
g a b = (*) a b
だから,g e1 e2という形式だから(g e1) e2と同等の式になる.そして新しくできた(g e1)をe2に適応する,これが関数の左結合性だな.
Main> (g 2) 3 6 Main> f ((g 2) 3) 7
次に,(.)の型を確認.
Main> :t (.) (.) :: (a -> b) -> (c -> a) -> c -> b
ということは
Main> (.) f (g 2) 3 7
これで正しく動く.これをどーすりゃhに投げ込めるか?
Main> (.) f g 2 3 ERROR - Cannot infer instance *** Instance : Enum (a -> a) *** Expression : (f . g) 2 3
じゃ駄目だからなぁ.とりあえず,
h x = (.) f (g x)
なら動くぞ.もう一息(だと思う).