什么是类型约束的类型?

时间:2012-07-13 16:43:11

标签: haskell ghc

例如,Num a => a

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

5 个答案:

答案 0 :(得分:7)

具有此特定类型约束的类型称为“限定类型”,并且该功能本身有时“合格多态”。我相信这个术语最初是由Mark Jones' ESOP '92 paper引入的。

不应将合格类型与更具主流的“有界多态性”概念相混淆,“有界多态性”是Java等语言中的泛型。有界多态性本质上是参数多态与子类型的(相当复杂)组合,而合格类型则没有子类型。

答案 1 :(得分:6)

我不是类型理论专家,但通过一些研究,这就是我发现的(这可能有用也可能没用,但我不能在评论中说明这一点。)

A Gentle Introduction to Haskell: ClassesNum a部分称为类型的上下文:

  

类型a必须是类Eq的实例的约束   写了Eq a。因此,Eq a不是类型表达式,而是它   表示对类型的约束,称为 context

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

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

  

类型类似乎与出现的问题密切相关   面向对象的程序设计,类型的有限量化,以及   抽象数据类型[CW85,MP85,Rey85]。一些连接是   概述如下,但需要做更多的工作来理解这些   关系充分。

本文写于1988年,所以我不确定这些关系现在是否已被完全理解,但Bounded quantification的维基百科页面未提及Haskell,所以我不确定它是否完全相同事情。 (再次,不是一个类型的理论家 - 只是一个喜欢Haskell的人)

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

  

对于每个squarea -> a属于aa类型为Num   到(+)课程(即,(*)上定义了a,{{1}}和否定。“

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

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

答案 2 :(得分:6)

Num a =>部分确实被称为约束;您可以将其读作“如果Num a为真,那么......”

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

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

答案 3 :(得分:6)

“合格类型”。见Mark P. Jones。 合格类型:理论与实践。剑桥大学出版社,剑桥,1994年。

大量相关的matches on Google

答案 4 :(得分:1)

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