价值,类型,种类......作为一个无限的序列?

时间:2013-01-18 15:04:47

标签: scala haskell functional-programming higher-kinded-types

我只是开始熟悉种类的概念,所以如果我不能很好地提出我的问题,请耐心等待......

值包含类型:

3 :: Int
[1,2,3] :: [Int]
('c',True) :: (Char,Bool)

类型有种类:

the type 'Int' has kind *
the type '[Int]' also has kind *
   but the type constructor [] has kind * -> *
similarly, the type (Char,Bool) has kind  *
   but the type constructor (,) has kind * -> * -> *

Kinds有什么作用?

他们有种类型,种类,品种或品种吗?

这个抽象序列到底有多远?我们是否会停止,因为我们没有语言,或者我们是否因为更远没有价值而停止?或者,也许是因为我们很快就达到了人类认知的极限,而且无法将我们的头脑包裹在更高级别的种类中?

一个相关的问题:语言为我们提供了值构造函数(如cons运算符)来创建值。语言还为我们提供了类型构造函数,如(,)或[]来创建类型。是否有任何语言暴露出类型构造函数来制作类型?

我很好奇的另一个边缘情况:我们显然有一个没有值的类型,表示为⊥,称为“底部类型”。有没有类型的东西:底层种类?

2 个答案:

答案 0 :(得分:30)

术语typekind无法很好地扩展。键入理论家,因为Bertrand Russell使用了“类型”的层次结构。其中一个版本有Integer : Type 0, Type 0 : Type 1, Type 1 : Type 2, ..., Type n : Type (n+1), ....在依赖类型的语言中,如Coq和Agda,人们经常需要这些“更高级别的”。

这样的级别有助于避免Russell's paradox。使用Type : Type往往会导致矛盾(有关替代设计,请参阅Quine)。

当我们需要时,这种数字的使用是标准符号。某些类型理论有“累积类型”,“累积级别”或“累积排序”的概念,其中说“如果t : Type n,那么t : Type (n+1)”。

累积级别+“级别多态性”给出的理论几乎和Type : Type一样灵活,但避免了悖论。虽然排序SetProp都是TypeType {1} : Type {2},但Coq主要隐含级别。也就是说,您通常不会看到数字,而且大部分时间它都可以正常工作。

Agda有一个语言编译指示,提供级别多态性,并使事情非常灵活,但可能有点官僚主义(然而,Agda通常不像其他领域的Coq那样“官僚”)。

另一个好词是“宇宙”。

答案 1 :(得分:6)

你应该阅读Tim Sheard的关于Omega的论文,这是一种Haskell的方言,有一个类型/种类/种类的无限塔,但没有完全依赖的类型。它解释了为什么你想要这个,并提到“排序”以上的水平在实践中(至少到目前为止)并没有直接使用。