generated at
deriving strategy

derivingの仕方には複数の方法がありうる
つまりある型クラスをいくつかの方法で導出しうる
コンパイラはその中から適切なものを選択しないといけない
特定の導出方法はderiving strategyと呼ばれる


型クラスとデータ型の組み合わせによって使用できる戦略が複数ある場合もある
その場合は、DerivingStrategiesを使ってどれを使うのか明示する
明示していない場合は、GHCの基準によって、どれかが選択される



基本的な4つのderiving strategy
標準のderiving strategy
普通に deriving (Show) みたいに書くやつ
コンパイラが用意したderivingアルゴリズムを使用してderivingする
対象の型クラス
Eq
Ord
Show
Read
Enum
Bounded
Haskellのnewtypeで作られた型に対するderiving
元の型のinstance実装を流用する
任意の型クラスをderivingできる
instanceを空の実装としてderivingする
型クラスにdefaultの定義がある場合は、それを利用する
同型な2つの型があったときに、型クラスのinstanceの実装を共有する
指定されたcastできる範囲のデータ型のinstanceを流用する


Kowainikによるその他のderiving戦略の分類
これと上の基本的な4つとの違い、スタンスの違いがよくわからんmrsekut
Auto derived
対象の型クラス
常にGHCがinstanceを定義してくれる
やろうと思えば手動でも定義できるらしい
Derive Whatever
Standalone deriving
Empty Deriving
型の数が0の型に対してもderivingできるようになる


GHCはderiving句を見つけると、deriving句内に書かれてある全ての型クラスのstrategyを関連付ける
このプロセスのことをこう呼ぶ



参考
一つ一つの戦略についても1節割いて説明がある
DerivingViaに関する記事だが、前半にderiving strategyの概要がある
DerivingViaを使えば、他の戦略も模倣できるよ、ということが書かれてある