gpt4 book ai didi

haskell - 名义类型角色和数据系列

转载 作者:行者123 更新时间:2023-12-03 15:06:26 26 4
gpt4 key购买 nike

我明白为什么新的 role system and annotations要求类型(和数据)系列参数在角色 nominal .

所以我期待当我宣布

data family CoordinateRepresentation ty a :: *

tya会得到 nominal角色。 (我的实际示例是关联的数据系列,但由于我认为它不会改变任何东西,因此我省略了随之而来的额外噪音。)

令我没想到的是,当我将其更改为
data family CoordinateRepresentation ty :: * -> *

是未命名的第二种类型参数仍然得到 nominal角色。

为什么是这样?它不能安全地获得 representational角色,因为没有任何 data instance CoordinateRepresentation ... = ...必须创建一个新的构造函数?那个构造函数怎么有机会在 nominal 处使用它的参数?以编译器看不到的方式起作用?即使它是一个开放系统并且有单独的编译,我仍然不明白。

最佳答案

首先,次要的一点:数据族是用类型变量还是用种类签名声明目前完全无关紧要,它们只是同一事物的不同语法。来自 the GHC User's Guide关于数据族声明:

Just as with GADT declarations named arguments are entirely optional, [...]



重点仍然存在,并已在 this GHC trac thread 中进行了讨论。 .简短摘要:可以通过为数据/类型族添加角色推断和/或角色注释,但尚未实现。

关于haskell - 名义类型角色和数据系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25539832/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com