アレはまぁイディオムみたいなもん。
パターンが色々あって、変態的なコーディングしてる人たちは色々知ってるってだけ。

(a1 -> b) っていう一引数関数の戻り値の型をcに変えたいよぉ
dot1 :: (b -> c) -> (a1 -> b) -> (a1 -> c)
dot1 = (.) -- ただの関数合成

(a1 -> a2 -> b) っていう二引数関数の戻り値の型をcに変えたいよぉ
dot2 :: (b -> c) -> (a1 -> a2 -> b) -> (a1 -> a2 -> c)
dot2 = (dot1 . (.)) -- = ((.) . (.))

(a -> b -> c -> d)っていう三引数(ry
dot3 :: (b -> c) -> (a1 -> a2 -> a3 -> b) -> (a1 -> a2 -> a3 -> c)
dot3 = (dot2. (.))

etc...

> let addShow = show `dot2` (+)
> addShow 1 2
"3"

参考はこの辺。
http://www.haskell.org/haskellwiki/Pointfree
http://wiki.haskell.jp/Old/sampou.org/cut-sea

俺は使わんけどな。