-->

一种VS型理论排名(Kind vs Rank in type theory)

2019-08-02 13:53发布

我有一个很难理解更高层次的VS更高级别的类型。 一种是非常简单的(感谢Haskell的文献为)和我曾经以为排名就像是那种当谈论类型,但显然不是! 我读了维基百科的文章无济于事。 所以,可以有人请解释一下什么是排名? 什么是更高的排名意味着什么? 更高级别多态性? 怎么说来种(如果有的话)? Scala和Haskell的比较将是真棒,太。

Answer 1:

秩的概念是不是真的涉及到各种各样的概念。

多态类型系统的等级描述了forall S可出现在类型。 在秩1型系统forall S可以仅出现在最外层,在秩2型系统,他们可能出现在嵌套中的一个水平等。

因此,例如forall a. Show a => (a -> String) -> a -> String forall a. Show a => (a -> String) -> a -> String将是秩1型和forall a. Show a => (forall b. Show b => b -> String) -> a -> String forall a. Show a => (forall b. Show b => b -> String) -> a -> String将是一个秩为2的类型。 这两种类型之间的区别在于,在第一种情况下,第一个参数的函数可以是带一个showable参数,并返回字符串的任何功能。 所以类型的功能Int -> String将是一个有效的第一个参数(如假设的功能intToString ),所以会类型的函数forall a. Show a => a -> String forall a. Show a => a -> String (如show )。 在第二种情况下,只有类型的函数forall a. Show a => a -> String forall a. Show a => a -> String将是一个有效的论据,即show会好起来的,但intToString不会。 结果下面的函数将是第二类型的法律功能,但不包括第一(其中++应该代表字符串连接):

higherRankedFunction(f, x) = f("hello") ++ f(x) ++ f(42)

请注意,这里的功能f适用于(潜在的)三种不同类型的参数。 所以,如果f是功能intToString这是行不通的。

两者的Haskell和Scala是秩-1(所以上述功能不能被写入在这些语言)默认情况下。 但GHC包含了语言的扩展,使排名-2基因多态性与另一个启用排名-N多态性任意N。



文章来源: Kind vs Rank in type theory