Generic型クラス
定義
hsclass Generic a where
type family Rep a :: * -> * -- representation of the data a
from :: a -> Rep a x
to :: Rep a x -> a
usecases
任意の代数データ型をJSONの構造に変換する
代数的データ型は
0個以上のコンストラクタを持ち、
各コンストラクタは0個以上の引数を取る
つまり代数的データ構造は構造を持っている
Generics を使えば、この構造に対して関数を定義することができる
ますこのような関数をgenericな関数と呼ぶ
名前が同じなのは見ればわかるが、意味合い的に
表現可能関手を考える際の
A\in\mathrm{Hask}と同じなのか?と訊いている

登場人物
目的の型
これは自分で定義したもの
e.g. UserTree
型
目的の型クラス
これはLibraryによって提供されるもの
e.g. Serialize
型クラス
Generic型クラス
こいつはなに?
V1, U1は、こいつのinstanceにもなっているのか
だから代表して deriving Generic
すれば全体に対して適用できる的な?
V1, U1などの型
Library提供者が Serialize
のinstanceにする