Возможно ли в (GHC) Haskell определить экзистенциально-квантованный новый тип? Я понимаю, что если задействовать классы типов, это невозможно сделать в реализации, реализующей словарь, но для моих целей не нужны типы классов. То, что я действительно хотел бы определить, следующее:
newtype Key t where Key :: t a -> Key t
Но GHC, похоже, не нравится. В настоящее время я использую data Key t where Key :: !(t a) -> Key t
. Есть ли способ (возможно, просто использовать -funbox-strict-fields
?) Для определения типа с той же семантикой и накладными расходами, что и версия newtype выше? Мое понимание заключается в том, что даже при строгом поле unboxed все равно будет добавлено дополнительное слово, хотя я мог бы быть совершенно не там.
Это не то, что вызывает у меня заметные проблемы с производительностью. Меня просто удивило, что новый тип не допускается. Я, естественно, любопытный человек, поэтому я не могу не задаться вопросом, скомпилирована ли версия, которую я имею, с тем же представлением или может быть определен какой-либо эквивалентный тип, который будет.