comparing
任意の関数を取ってその結果を比較するための比較関数を生成する
code:hs
comparing :: (Ord a) => (b -> a) -> b -> b -> Ordering
第1引数の関数を使用して、2つのb型の値を比較する新しい関数を生成する
使用例
code:hs
import Data.List (sortBy)
import Data.Ord (comparing)
-- 文字列のリストを長さに基づいてソートする
-- comparing lengthで2つの文字列をその長さに基づいて比較する関数を生成している
sortStringsByLength = sortBy (comparing length)
文字列の長さに基づいてsortする、という要件を考えた時、
単純に考えれば、(String,長さ)というペアを作り、長さでsortした後で、fstだけ取り出す、となるが
そうではなく、そもそも「その要件で比較する関数」を先に作っておき、それを元にsortする、と発想する