関数合成です。
(.) :: (b->c) -> (a->b) -> (a->c)関数合成の例
f . g = \ x -> f (g x)
「.」という中置演算子は、(bという型の引数をとりcという型を返値とする関数)型の引数と、(aというの引数をとりbという型を返値とする関数)型の引数をとり、(aというの引数をとりcという型を返値とする関数)型を返値とする関数である。
ということで、f.gとすると、引数に関数gを適用したものにさらに関数fを適用したものとなる。
summ :: [Int] -> Int
summ [] = 0
summ (x:xs) = x + summ xs
incm :: Int -> Int
incm x = x + 1
-- summ を適用したあとに、incmを適用する関数
sum_and_inc :: [Int] -> Int
sum_and_inc [] = 1
sum_and_inc a = (incm . summ) a
sum_and_inc [0..10]とすると、56が帰ってきます。