data宣言の型変数と使い方が異なる。型クラスNumを実装する。instanceキーワードを使う。型クラスは、デフォルト実装を持つことができる。8からインタフェイスにデフォルト実装を持てるようになった。C++でも抽象クラスにメソッド定義ができる。どちらか片方だけ実装すればよい。型に依存しないアルゴリズムなどは、型クラスのほうで定義することで、汎用的になる。使えるメソッドが限定されすぎる。見たような、data宣言の多相型でもよい。別の型クラスから継承することができる。データ型は継承できない。機能が押し込まれているのを、分離したイメージ。