【发布时间】:2015-04-16 22:13:26
【问题描述】:
如果我有一个我有时只关心的带有幻像参数的类型,比如这个:
data Foo p a b = Bar a b
是否有任何破解方法可以编写类型同义词 Baz 使得 Baz a b 是 Foo p a b 对于我忘记的一些 p?
你不能这样做:
type Baz a b = Foo p a b
虽然你可以做到(使用适当的扩展):
type Baz a b = forall p.Foo p a b
这似乎不是我想要的,因为我无法将Foo P1 a b 类型的值转换为Baz a b 类型,并显示有关“刚性类型变量”的消息。
您是否需要另一层构造函数来实现此效果,如下所示?能简单解释一下原因吗?
data Baz' a b = forall p.Baz' (Foo p a b)
【问题讨论】:
-
我认为您正在寻找this kind of behavior,但目前不支持。
-
我也想要这个,打开了a ticket for it。
标签: haskell ghc existential-type type-synonyms