では、こんな関数があったとき
replicate 2 (product (map (*3) (zipWith max [1,2] [4,5])))
関数合成をして、まっとうな記述をするとこう書けるらしい。
replicate 2 . product . map (*3) $ zipWith max [1,2] [4,5]
Haskell学びたてのころは、どういう発想するとこうなるのか(そしてこの書き方の何が嬉しいのか)あまりわかってなかった。
F#を学んだことによって、
(replicate 2 << product << map (*3)) <| (zipWith max [1,2] [4,5])
という目で見ることができるようになった。 演算子の記号が違うだけでだいぶ雰囲気が変わるもんだ。
でもやっぱりF#みたいに左から書き、左から読みたいな。
(zipWith max [1,2] [4,5]) |> (map (*3) >> product >> replicate 2)
んで合成関数を再利用しないんだったらもういっそ
zipWith max [1,2] [4,5]) |> map (*3) |> product |> replicate 2