学びの日記

日々の勉強記録

Haskell #1

Haskellの学習続き。今日は型。

Haskellではすべてのものが型を持っている。関数も型を持っていて、例えば引数の型がA、戻り値の型がBだったら、[A]->[B]という型をもつ。複数の引数A1,A2を持つ場合は[A1]->[A2]->[B]という型をもつ。なんで([A1],[A2])->[B]みたいな型じゃないのかという疑問が湧くがそれは今後明らかになる。

Haskellでは自分で型を作ることができる。さらに、Javaのインターフェースを思い起こさせるような概念として型クラスがある。型クラスとは、型がある振る舞いをすることを定義したものである。実例をあげると、Eq型クラスは「等しいか判定できる」ことを示すもので、メソッドとして例えば「==」をもっている。演算子(関数)==の型は、`(==):(Eq a)=>[a]->[a]->[Bool]`となっていて、2つの型aの引数の型がEq型クラスのインスタンスでないといけないことを示す。こんな風にして関数の形で型の振る舞いを決めることができる。

ひとつの型はいくつもの型クラスのインスタンスになれる。

次章は関数なのだがこれは散々以前やったので飛ばし、次回は第5章「高階関数」をやることにする。