降順ソート

(reverse . sort) 的なことをしたい時は

rSort :: (Ord a) => [a] -> [a]
rSort = sortBy (flip compare)

でいいんだろか。compare関数はPerl/Rubyでいう <=>

一般化を考える

sortBy (flip compare) が sortBy compare の逆順となるように、
一般に sortBy f の逆順は sortBy (flip f) で出来るので、次のように rSortBy を定義できる。

rSortBy :: (a -> a -> Ordering) -> [a] -> [a]
rSortBy = sortBy . flip


-- rSortByと比較関数で降順ソートを定義
rSort :: (Ord a) => [a] -> [a]
rSort = rSortBy compare

-- 第2要素の比較による降順ソート
rSortSnd :: (Ord b) => [(a,b)] -> [(a,b)]
rSortSnd = rSortBy (Data.Ord.comparing snd)