gpt4 book ai didi

haskell - 证明 Haskell 中名义类型角色需要的最简单示例

转载 作者:行者123 更新时间:2023-12-04 00:51:33 30 4
gpt4 key购买 nike

我试图了解是什么决定了类型参数是否必须是标称的。

虽然 GADT 和类型家族在某种意义上看起来不同,但它们不是“简单容器”,因为它们的实例定义可以“查看”它们的参数,但简单类型是否可以明显需要名义参数,例如 Set?

最佳答案

你应该可以强制吗?

 coerce :: Coercible a b => F a -> F b

如果不是,那么 F 的参数应该是名义上的。

Set 的情况下它的第一个角色是名义上的
type role Set nominal

因为我们不想
coerce :: Set Int -> Set ReversedInt

因为 newtype ReversedInt = RevInt Int deriving (Eq, Ord) via Data.Ord.Down Int有一个完全不同的 OrdInt以及 Set的内部结构取决于其元素的顺序。 Map 相同
type role Map nominal representational

对于像这样的 GADT
data F :: Type -> Type where
FInt :: F Int

我们只有一个居民,所以我们不想让
coerce :: F Int -> F ReversedInt

所以,GHC 推断 type role F nominal .

关于haskell - 证明 Haskell 中名义类型角色需要的最简单示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49209788/

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