有没有一种方法可以在GHC Haskell中定义现有的量化新类型?
|
(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版本具有相同语义和开销的类型?我的理解是,即使在未填写严格字段的情况下,仍然会有一个额外的标记词,尽管在那里我可能完全错了。
这并不是引起我任何明显的性能问题的原因。令我惊讶的是,不允许使用新类型。我是一个天生好奇的人,所以我不禁要问,我所拥有的版本是否正在被编译为相同的表示形式,或者是否可以定义任何等效类型。
没有找到相关结果
已邀请:
2 个回复
逆捐凶撤小
就可以了:
例如。
从逻辑上讲,您确实需要在某个地方分配字典(或标签)。如果删除构造函数,那没有任何意义。 注意:虽然您似乎无法暗示功能,但是您也不能取消对函数的装箱操作,也不能取消多态字段。 有什么方法(也许只是使用
?)来定义一个类型和上面的newtype版本具有相同语义和开销的类型? 删除-XGADT可以帮助我考虑以下问题:
如in8ѭ 因此,您想确保删除
构造函数。 这是GHC中用于检查
约束的代码:
我们可以看到为什么ѭ12the对表示没有任何影响,因为它包含多态成分,因此需要使用通用表示。而没有抬起头的“ 10”是没有意义的,非单例构造函数也没有意义。 我唯一能想到的是,就像存在的记录访问器一样,如果暴露
,则不透明类型变量将转义。
你换