8

例如,Num a => a

我以为它们只是被称为“受限类型”,但谷歌搜索并没有出现该术语的很多用法,所以我很想知道它们是否有其他名称。

4

5 回答 5

7

具有这种特定约束的类型称为“限定类型”,而特性本身有时称为“限定多态性”。我相信该术语最初是由Mark Jones 的 ESOP '92 论文引入的。

限定类型不应与更主流的“有界多态性”概念相混淆,Java 等语言中的泛型基于该概念。有界多态性本质上是参数多态性与子类型的(相当复杂的)组合,而合格的类型在没有子类型的情况下也能相处。

于 2012-07-14T12:51:51.253 回答
6

Num a =>部分确实称为约束;您可以将其解读为“如果Num a是真的,那么……”

通常,约束和量词一起讨论。任何受约束的类型都可以转换为等效类型,其中约束仅出现在内部forallexists量词中。因此,您不会像听到“受约束的参数多态性”(forall a. C => T)、“受约束的存在类型”(exists a. C => T)或“受约束的多态性”(这两种量词)那样经常听到“受约束的类型”。

一个相关的术语是“有界多态性”。有界多态性通常意味着受约束的多态性,其中约束是子类型或超类型约束。但是,并没有严格遵循这种区别。在 Java 或 Scala 等具有子类型的语言中,您经常会听到称为“绑定”的任何类型的约束。

于 2012-07-13T20:26:53.683 回答
6

“合格的类型”。见马克·琼斯。合格类型:理论与实践。剑桥大学出版社,剑桥,1994 年。

谷歌上有很多相关的比赛

于 2012-07-14T11:29:22.940 回答
6

我不是类型理论专家,但通过一些研究,这就是我发现的(这可能有帮助,也可能没有帮助,但我不能在评论中加入这个)。

Haskell 简介:类调用Num a类型上下文的部分:

类型 a 必须是类 Eq 的实例的约束写成 Eq a。因此,Eq a 不是类型表达式,而是表示对类型的约束,称为上下文

所以我想你可以说“一个有上下文的类型”,或者你提到的“受约束的类型”。

另一个值得关注的地方是(我相信)为 Haskell 首次描述类型类的地方:How to make ad-hoc polymorphism less ad-hoc [postscript]。

类型类似乎与面向对象编程、类型的有界量化和抽象数据类型中出现的问题密切相关 [CW85, MP85, Rey85]。下面概述了一些联系,但需要做更多的工作才能充分理解这些关系。

这篇论文写于 1988 年,所以我不确定这些关系现在是否已被完全理解,但有界量化的维基百科页面没有提到 Haskell,所以我不确定它是否完全一样。(再一次,不是类型理论家——只是一个喜欢 Haskell 的人)

此外,关于square :: Num a => a -> a它所说的类型:

这被读作“对于属于类的每个这样的类型(即,这样,,和否定定义在 上),square具有类型。”a -> aaaNum(+)(*)a

你可以说类型“属于一个类”。

这就是我所拥有的一切。就个人而言,我认为“受限类型”或“受限于类的类型”工作正常。

于 2012-07-13T17:50:13.770 回答
1

您可以将其称为有界多态类型(参见wikipedia)。

于 2012-07-13T17:22:01.050 回答