先日、関数合成を使うと、無駄なletやfunを減らせていいよね、という話をしました。

let (>>) f g x = g (f x)

で、関数合成を多用していると、2引数関数に対しても合成をしたくなる局面が出てきます。
たとえば、compareを元にしてequalを作ろうと思った場合、素直なコードは以下になります。

let equal x y =
  compare x y = 0

これは、「xとyをcompareして、その値が0と等しいかを検査する」という関数になります。
これをcompareと(=) 0の関数合成で書こうとするとさっきの関数合成関数ではできません。(後述するカリー化とアンカリー化を使えば出来ますが)

Continue reading