まず1つの関数を呼び出し、それからもう1つの関数にその結果を渡して呼び出したものに
等しい。
ただ、簡単に利用できるわけではなく、たとえば以下のように定義しなければならない
(すみません、僕の環境では>.>だとAmbiguous occurrenceなるエラーが出てしまったので
使えませんでした)
(#) :: (b -> c) -> (a -> b) -> a -> c f # g = \x -> f (g x)
結果(リストを受け取って、tailしてsumしたものをnegateする関数
Main> map (negate # sum # tail) [[1..5],[3..6],[1..7]]
[-14,-15,-27]
このように書くことも出来ます。
関数合成 - 結城浩のHaskell日記 - haskell
($$) :: (a -> b) -> (b -> c) -> (a -> c) ($$) = flip (.) f = (1+) g = (2*)
Main> (f.g) 3
7
Main> (g$$f) 3
7