generated at
HKD
Higher Kinded Datatypeの略で、データ型にパラメータを追加することにより、汎用性を高める技術。以下のように、全フィールドを型パラメータで包む。User Identityは普通のレコードと同型になり、User Maybeなら要素が欠けているかもしれないレコード、Const aなら全部a型で置き換えたようなものが作れる。

haskell
data User h = User { userId :: h Int , userName :: h Text }

HKDは、データ型の《形状》と《実体》を分離できるため、任意のデータ型に対するコードが格段に書きやすくなる(ジェネリクス)。レコードの各フィールドに対し、共通の性質なり操作なりを使いたい場合に導入したい。

比較的ポピュラーな実装 barbies
先駆者 extensible vinyl