import Data.List on :: (a -> a -> b) -> (c -> a) -> (c -> c -> b) f `on` g = \x y -> g x `f` g y
のようなonを定義しておくと、
sortBy (compare `on` snd) [(1,2),(2,1),(1,3)]
のように書くことができます。以下と同じですが、ちょっと読みやすげ。
sortBy (\ (_, x) (_, y) -> compare x y) [(1,2),(2,1),(1,3)]
C++で書くときには合成用の関数を書きながらλ式が使えればいいのにと思い、Haskellで書くときにはλ式は面倒なので関数合成する方向にいくのは、C++で関数を合成する書き方が面倒だからでしょうか(もしくはboost::lambdaは引数を明示しないので楽だからか)。