uncurry?

uncurry なる関数が Excercise に出てて、コリャなんだ?と疑問符が頭の中を飛び交い中。

とりあえず型を問い合わせてみた。ついでに uncurry があるなら curry もあるのか?って。あった。

Prelude> :t uncurry
uncurry :: (a -> b -> c) -> (a, b) -> c
Prelude> :t curry
curry :: ((a, b) -> c) -> a -> b -> c

型から考えると curry はタプルを取る関数を受け取り、タプルを分解してタプルのそれぞれの要素を引数として与えられるように変換する関数、のようだ。

先日読み取った、カリー化は引数をひとつずつ適用していく、その仕方のことというのと符合している、気がする。

uncurry は逆で、ふたつ以上の引数を取る関数を受け取り、その最初のふたつの引数をまとめてひとつのタプルで与えられる関数に変換する関数だ、ということか。

ふむん。