haskell有依赖类型吗?


20

我知道Haskell已经可以对另一个类型进行参数化(类似于C ++中的模板编程),但是我想知道Haskell是否也可以对值进行参数化-是否支持依赖类型。使用从属类型,您可以拥有在整数上参数化的类型,例如大小为n的向量,大小为n×m的矩阵等。

如果没有,为什么不呢?将来是否有可能获得支持?

Answers:


18

Haskell并不完全具有依赖类型,尽管与诸如DataKinds和扩展名可以非常接近TypeFamilies。据我所知,目前的问题是,值级别的Haskell有明确的底部,而类型级别的Haskell没有。

这不会阻止您对类型进行参数设置,而不是对其他类型进行参数设置,包括DataKind-values的提升。从GHC 7.6开始,在DataKinds启用后,您可以使用类型级的自然语言和字符串,以及任何(非高级,非通用的)类型级元组,类型级列表和类型级提升。 ,非约束)代数数据类型,与C ++在模板中使用整数的能力类似(但比它更通用)。


1
GHC 8中即将进行的更改是否添加了完全依赖类型?
Janus Troelsen

@JanusTroelsen不完全;它们使依赖的种类成为可能
Ptharien的圣火,

8

为了进一步解释Ptharien's Flame很好地解释了当前状态-GHC Haskell似乎在每个版本的依赖类型(同时保持相分离)的方向上都进一步发展。

因此,例如,在今年9月的ICFP 2013上,应提交有关此过程下一阶段的论文,“走向依赖类型的Haskell:具有种类相等性的系统FC”,有关折叠种类和类型级别。正如3年前宣布的计划

它甚至提到了下一步:“我们还知道,Adam Gundry即将发表的论文将在System FC版本中包含Π型,并且我们也希望在源语言中也提供此功能。(个人交流)”


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.