gpt4 book ai didi

haskell - 约束类型在哪里定义?

转载 作者:行者123 更新时间:2023-12-02 10:27:26 26 4
gpt4 key购买 nike

我不熟悉 GHC 内部结构,但我有几个关于 ConstraintKinds 的问题。

上面写着 GHC.Exts那个

data Constraint :: BOX

这是一种误导,因为Constraint是一种排序BOX。这给我们带来了第一个问题:我们可以导入和导出种类吗?这是如何运作的?

如果我完全不对劲,请在下一部分中纠正我。通过尝试不同的导入并浏览 hackage 的源代码,我的猜测是 GHC.ExtsGHC.Base 导入 Constraint,谁反过来,从 GHC.Prim 导入它。但我没有看到它在 GHC.Prim 中定义的位置?

最佳答案

据我所知,任何 Haskell 源文件中都没有 Constraint 的定义。它是一个内置的、连线的名称,被定义为属于 GHC 源本身的 GHC.Prim 内。因此,特别是 Constraint 不是升级的数据类型,没有称为 Constraint 的相应类型 * 数据类型。

GHC 中还有其他类似的类型,例如 AnyKOpenKind 甚至 BOX 本身。

GHC 在内部数据类型和种类以及上述任何内容之间并没有真正产生很大的区别。这就是为什么他们例如尽管目标种类不同,但所有这些都显示为使用 data 定义的。

请注意,就 GHC 而言,我们还有

data BOX :: BOX

不过,用户不可能直接定义 super 类 BOX 的新“类”。

据我所知,导入/导出在类型和种类命名空间之间也没有区别。所以例如

import GHC.Exts (OpenKind, BOX, Constraint)

是合法的。事实上,如果你接着说

x :: Constraint
x = undefined

您不会收到范围错误,而是类型错误,表示需要类型 * ,但类型/类型 BOX 是提供。

我也许还应该说,关于类型的整个故事在某种程度上是在变化的,并且正在讨论一些提案来改变这一点:参见例如https://ghc.haskell.org/trac/ghc/wiki/NoSubKinds进行相关讨论。

关于haskell - 约束类型在哪里定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29564375/

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