関数合成演算子
.の扱いが分からない・・。
コメントを貰ったんだけどぱっと見で動きが理解できなかった。
f :: (b -> c) -> (a -> b) -> a -> c f g h = g . h f :: (b -> c) -> (a1 -> a -> b) -> a1 -> a -> c f g h = (g .) . h f :: (b -> c) -> (a2 -> a1 -> a -> b) -> a2 -> a1 -> a -> c f g h = ((g .) .) . h
うーん。関数合成は
. :: (b -> c) -> (a -> b) -> a -> c
こうなので・・
f :: (b -> c) -> (a -> b) -> a -> c f g = (g .)
これは (.) g と同義で・・・
そもそも
f1 g = (g .) f2 g h = g . h
これは . と同じ事なのか。
f g h = (.) g . h = ((.) g .) h = ((g .) .) h -- // (g .) = (.) g
というのは分かった。が・・今度は関数合成演算子で頭がぐるぐる。
セクションに慣れないとダメかぁ。
4 / 2 => (4 /) 2
これがすぐ思い付けば簡単だったんだな。
f g h a b = g (h a b) f g h a b = g $ h a b f g h a = g . h a f g h a = (g .) $ h a f g h = (g .) . h
こう機械的に変更出来ても・・数学で公式だけ覚えて意味を理解していない状況みたいな感じだ。
あとこういうふうに一行一行書いたら分かるけど、f g h = (g .) . h だけ見てぱっと分かるかどうか・・慣れの問題かな。