GADT类型变量的角色的未来?

时间:2016-12-15 06:50:34

标签: haskell types ghc roles gadt

question from yesterday定义了使用数据系列的HList(来自HList包)。基本上是:

data family HList (l :: [*])
data instance HList '[] = HNil
newtype instance HList (x ': xs) = HCons1 (x, HList xs)

pattern HCons x xs = HCons1 (x, xs)

而不是通常的(IMO更优雅和直观)GADT定义

data HList (l :: [*]) where
  HNil :: HList '[]
  HCons :: x -> HList xs -> HList (x ': xs)

这是因为数据系列版本让我们强制(我们只能强制HList (x ': xs)案例,因为它是newtype instance,但这就足够了),而GADT只推断名义角色为l(从而阻止任何胁迫)。 (My answer to the mentioned question has a concrete example of this。)

HList讨论了GADT角色系统相对于HList的失败。基本上,GHC会自动标记任何类似GADT的"类型变量为名义。

鉴于从那时起已经过了一段时间two year old question,是否有任何前进路径(即一些现有的想法,一些开放的Trac票,真的是什么)来检查GADT中更有趣的角色(如{{1} })? GADT或DataKinds和角色的相互作用是否存在一些基本限制?为实现这一目标需要实施/创建什么?

0 个答案:

没有答案