例如,Num a => a
。
我认为他们只是被称为“约束类型”,但谷歌搜索没有出现该术语的许多用法,所以我很想知道他们是否有其他名字。
答案 0 :(得分:7)
具有此特定类型约束的类型称为“限定类型”,并且该功能本身有时“合格多态”。我相信这个术语最初是由Mark Jones' ESOP '92 paper引入的。
不应将合格类型与更具主流的“有界多态性”概念相混淆,“有界多态性”是Java等语言中的泛型。有界多态性本质上是参数多态与子类型的(相当复杂)组合,而合格类型则没有子类型。
答案 1 :(得分:6)
我不是类型理论专家,但通过一些研究,这就是我发现的(这可能有用也可能没用,但我不能在评论中说明这一点。)
A Gentle Introduction to Haskell: Classes将Num 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
,它说:
对于每个
square
,a -> a
属于a
,a
类型为Num
到(+)
课程(即,(*)
上定义了a
,{{1}}和否定。“
你可以说类型“属于一个类”。
这就是我所拥有的一切。就个人而言,我认为“约束类型”或“类型限制为类”工作正常。
答案 2 :(得分:6)
Num a =>
部分确实被称为约束;您可以将其读作“如果Num a
为真,那么......”
通常,约束和量词会一起讨论。任何约束类型都可以转换为等效类型,其中约束仅出现在forall
或exists
量词内。因此,您不会听到“约束类型”,因为您会听到“约束参数多态”(forall a. C => T
),“约束存在类型”(exists a. C => T
)或“约束多态” (两种量词)。
相关术语是“有界多态”。有界多态通常意味着受约束的多态性,其中约束是子类型或超类型约束。但是,并没有严格遵循这种区别。在像Java或Scala这样的子类型的语言中,您经常会听到任何一种称为“绑定”的约束。
答案 3 :(得分:6)
“合格类型”。见Mark P. Jones。 合格类型:理论与实践。剑桥大学出版社,剑桥,1994年。
大量相关的matches on Google。
答案 4 :(得分:1)
您可以将其称为有界多态类型(请参阅wikipedia)。