関数の型
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では「高階関数」と呼ぶ。
次はこの「高階関数」を調べる。