HKD
Higher Kinded Datatypeの略で、データ型にパラメータを追加することにより、汎用性を高める技術。以下のように、全フィールドを型パラメータで包む。User Identityは普通のレコードと同型になり、User Maybeなら要素が欠けているかもしれないレコード、Const aなら全部a型で置き換えたようなものが作れる。
code:haskell
data User h = User
{ userId :: h Int
, userName :: h Text
}
HKDは、データ型の《形状》と《実体》を分離できるため、任意のデータ型に対するコードが格段に書きやすくなる(ジェネリクス)。レコードの各フィールドに対し、共通の性質なり操作なりを使いたい場合に導入したい。