Haskell の複数の引数を渡す関数の型
複数の引数を渡す関数には、例えば和を求める関数があげられる.
add x y = x + y
これの型を調べると以下のようになる.
> :t add add :: Int -> Int -> Int
Int と Int を引数にとって, Int を返す関数なのだが、
いまいち複数の引数を取っている感が無い.
先日紹介した,「プログラミング Haskell」(邦題 : Programming in Haskell) 3.6 章の解説でようやく理解できた.
そもそも複数の引数を取るというのが間違いであり,カリー化されていただけだ。
先程の型に括弧をつけると以下のようになる.
add :: Int -> (Int -> Int)
つまり,Int 型の引数を一つ取り,"Int 型の引数を取りInt型を返す関数"を返す型ということだ.
カリー化の考案者を Haskell Curry だと勘違いしていました.
実際は Gottlob Frege という人らしい.(wiki)