プログラミング Haskell 第10章 型とクラスの定義 その3

今日は第10章の仮想マシンを実装するところを写経しました。

型でプログラミングするという感覚がだんだんわかってきたような気がします。

  • クラス(型クラス)は class C a where ... と記述する
    • 型 a がクラス T のインスタンスであるためにどんな関数(メソッド)を実装する必要があるかを宣言する
    • Haskell では「クラス」というと「型」の集合を指す。ちょっとメタクラスっぽいですね。
    • 「メソッド」と言うとあるクラスの型が実装していないといけない関数のこと。同じ名前でも型によって実装を持つことができるのが普通の関数との違いでしょうか?
  • ある型をクラスのインスタンスにするには instance C T where ... (C がクラスで T が型)と記述する
  • Bool 型も Ord クラスのインスタンスで順番がある。False < True
  • data で定義した型が構成子を持つ場合、その引数の型も同じクラスのインスタンスでないといけない(Eq のインスタンスである型 A が data A = B a で宣言されていたら a も Eq のインスタンス)

モナド型の説明と練習問題を残して連休に突入します。