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

Haskell 类GADT类型变量的角色的未来?,haskell,types,ghc,roles,gadt,Haskell,Types,Ghc,Roles,Gadt,A具有使用数据族的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) 而不是通常(我更优雅和直观)的GADT定义 data HList (l :: [*]) where HNil :: HList '[]

A具有使用数据族的
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)
而不是通常(我更优雅和直观)的GADT定义

data HList (l :: [*]) where
  HNil :: HList '[]
  HCons :: x -> HList xs -> HList (x ': xs)
这是因为数据族版本允许我们强制(我们只能强制
HList(x):xs)
案例,因为它是
newtype实例,但这就足够了),而GADT仅推断
l
的名义角色(从而阻止任何强制)。()

本文讨论了GADT角色系统在
HList
方面的缺陷。基本上,GHC会自动将任何“类似GADT”的类型变量标记为标称变量

考虑到从那时起已经过去了一段时间,是否有任何前进的道路(即一些现有的想法、一些开放的Trac票证、任何东西)来检查GADT中更有趣的角色(如
HList
)?GADT或
数据类型和角色之间的相互作用是否存在一些基本限制?需要实施/创建什么才能使其工作