型族に部分適用できない
型シノニム族(type family)を例えばType -> Typeのような型パラメータとして渡すことはできないため、extensibleのレコードを活用する上でしばしば不便となる。 code:haskell
class Incremental a where
type Diff a
diff :: a -> a -> Maybe (Diff a)
newtype WrapDelta h x = WrapDelta { unwrapDelta :: Maybe (Delta (h x)) }
instance WrapForall Incremental h xs => Incremental (h :* xs) where
type Delta (h :* xs) = WrapDelta h :* xs
そもそもデータ族ならこの問題は発生しない。しかし、全部のインスタンスについて個別のデータコンストラクタを定義するのはなかなか面倒ではある。
関連項目