プログラミング Haskell 第3章 型とクラス その2
- 関数型 - A -> B のような記法
- カリー化された関数
- 複数の引数をもつ関数は、1つ引数をうけとって「残りの引数をうけとって結果を返す関数」を返す関数として解釈される
- Int -> (Int -> Int) こんな感じ
- -> は右結合なので上は Int -> Int -> Int と書いても同じ
- また関数適用は左結合なので func x y z は (((func x) y) z) となる
- 多相型
- 「任意の型を要素にもつリスト」のように型変数を含む型([a])
- 多重定義型
- 型にクラス制約を持たせたもの(Num a => a -> a -> a など)
- Num が「クラス」そのインスタンスが具体的な型
- 数値も多重定義されている(3 :: Num a => a など)
つまり多相型は型のなかにその関数の処理上関知しなくていい部分があって、そこは本当になんでもいい場合。多重定義型はある制限に従った型なら受け付けることができるよという場合ですね。クラスとは「型の集合」のようなものでしょうか。つまり「型の型」?ちょっと違うような気もしますね。第3章はこの後基本クラスについて紹介がありますが、続きはまた来週。