関数の型

Haskellには基本的な型(IntやCharなど)の他に関数の型も存在する。

例えば文字列を改行で区切った配列に変換するlines関数の型は

String -> [String]

となる。
これは引数1の型がString、戻り値の型がStringの配列という意味になる。

関数の型宣言

Haskellは関数を定義する場合、あえて型を指定しなくても型推論によって自動的に型が決まるが、明示的に型を指定したい場合は、関数の定義の前で以下のように型を宣言できる。

square :: Int -> Int
square n = n * n

「関数名 :: 引数1の型 -> 引数2の型 -> ・・・ -> 戻り値の型」という形式で型を宣言できる。

この概念はC#のデリゲートと同じなので、特に難しくない。
ちなみにこれをC#で記述すると、

delegate int SquareDelegate(int n);

int Square(int n) { return n * n; }

という感じになる。

このようにHaskellでは関数の型を厳密に定義できるため、関数の引数として関数を渡すことができる。関数を変数のように扱えるわけだ。これをHaskellでは「高階関数」と呼ぶ。

次はこの「高階関数」を調べる。