什么是Haskell的DataKinds扩展?

我试图找到DataKinds扩展的解释,这将有意义,我来自只有读取Learn You a Haskell.有没有一个标准的来源,将有意义我与我学到了什么?

编辑:例如documentation

With -XDataKinds, GHC automatically promotes every suitable datatype
to be a kind, and its (value) constructors to be type constructors.
The following types

并给出了示例

data Nat = Ze | Su Nat

产生以下类型和类型构造函数:

Nat :: BOX
Ze :: Nat
Su :: Nat -> Nat

我没有得到点。虽然我不明白BOX的意思,报表Ze :: Nat和Su :: Nat – > Nat似乎说明了通常情况下,Ze和Su是正常的数据构造函数,正如你期望看到的ghci

Prelude> :t Su
Su :: Nat -> Nat
让我们从基础开始

种类

类型是类型*的类型,例如

Int :: *
Bool :: *
Maybe :: * -> *

注意 – >被重载以意味着在类型级别的“功能”。所以*是一种正常的Haskell类型。

我们可以要求GHCi打印出以下内容:k。

数据类型

现在这不是很有用,因为我们没有办法让我们自己的种类!用DataKinds,当我们写

 data Nat = S Nat | Z

GHC将促进这种创建相应的种类Nat和

 S :: Nat -> Nat
 Z :: Nat

所以DataKinds使得类系统可扩展。

用途

让我们使用GADTs做原型实例

 data Vec :: Nat -> * where
    Nil  :: Vec Z
    Cons :: Int -> Vec n -> Vec (S n)

现在我们看到我们的Vec类型由长度索引。

这是基本的,10k脚的概述。

**这实际上继续,值:类型:种类:排序…一些语言(Coq,Agda ..)支持这个无限的宇宙堆栈,但是Haskell把一切都变成一种。

翻译自:https://stackoverflow.com/questions/20558648/what-is-the-datakinds-extension-of-haskell

转载注明原文:什么是Haskell的DataKinds扩展?