レコードでもバリアントでもうまく表現できない
ある属性attr1はAとBという値を持つ。またある属性attr2はCとDという値を持つ。これをOCamlで表現するとこう。
type t = { attr1 : [ `A | `B ]; attr2 : [ `C | `D ]; }
ただし、attr2のDという値はattr1の値がBの時のみ有効であるという条件を加えると...さぁ困った。これってdependent typeとかいうやつがあれば解決するのかなー?もしそうだとすると、型レベルなんとか万歳。