Dou*_*ean 8 haskell ghc type-families
我理解为什么新的角色系统和注释要求类型(和数据)系列参数起作用nominal.
所以当我宣布时,我期待
data family CoordinateRepresentation ty a :: *
Run Code Online (Sandbox Code Playgroud)
这ty和a将得到nominal的角色.(我的实际例子是一个相关的数据系列,但由于我认为它没有改变任何东西,我省略了随之而来的额外噪音.)
我没想到的是,当我改变它时
data family CoordinateRepresentation ty :: * -> *
Run Code Online (Sandbox Code Playgroud)
是未命名的第二类型参数仍然是一个nominal角色.
为什么是这样?它不能安全地获得一个representational角色,因为没有data instance CoordinateRepresentation ... = ...必要创建一个新的构造函数?该构造函数如何能够nominal以编译器无法看到的方式在角色中使用其参数?即使它是一个开放的系统,并且有单独的编译,我仍然没有得到它.
作为第一个,小问题:数据系列是使用类型变量声明还是使用类型签名声明目前完全无关紧要,它们只是同一事物的不同语法.从该GHC用户手册上的数据系列的声明:
正如GADT声明命名参数完全是可选的,[...]
主要观点仍然存在,并已在此GHC trac线程中进行了讨论.简短摘要:可以通过为数据/类型系列添加角色推断和/或角色注释来实现,但尚未实现.