在Haskell的(GHC)中是否有可能定义一个存在量化的新类型?我知道如果涉及到类型类,那么在字典传递实现中是无法做到的,但对于我的目的来说不需要类型类。我真正想定义的是这个:
但 GHC 似乎不喜欢它。 我目前正在使用
newtype Key t where Key :: t a -> Key t
但 GHC 似乎不喜欢它。 我目前正在使用
data Key t where Key :: !(t a) -> Key t
。 有没有办法(也许只是使用 -funbox-strict-fields
?)定义一个与上面新类型版本相同语义和开销的类型?我的理解是,即使强制字段未装箱,仍将存在额外的标记字,尽管我可能完全错误。这些不会对我的性能造成任何明显问题。只是新类型不被允许让我感到惊讶。我是一个天生好奇的人,所以我不禁想知道我拥有的版本是否被编译为相同的表示形式,或者是否可以定义任何等效类型。
newtype F f t a where F :: t a -> F f t (f a)
。在这么短的空间里很难解释它为什么有用,但我确实发现自己需要这样一个东西。 - mokus