我知道Haskell已经可以对另一个类型进行参数化(类似于C ++中的模板编程),但是我想知道Haskell是否也可以对值进行参数化-是否支持依赖类型。使用从属类型,您可以拥有在整数上参数化的类型,例如大小为n的向量,大小为n×m的矩阵等。
如果没有,为什么不呢?将来是否有可能获得支持?
我知道Haskell已经可以对另一个类型进行参数化(类似于C ++中的模板编程),但是我想知道Haskell是否也可以对值进行参数化-是否支持依赖类型。使用从属类型,您可以拥有在整数上参数化的类型,例如大小为n的向量,大小为n×m的矩阵等。
如果没有,为什么不呢?将来是否有可能获得支持?
Answers:
Haskell并不完全具有依赖类型,尽管与诸如DataKinds
和扩展名可以非常接近TypeFamilies
。据我所知,目前的问题是,值级别的Haskell有明确的底部,而类型级别的Haskell没有。
这不会阻止您对类型进行参数设置,而不是对其他类型进行参数设置,包括DataKind
-values的提升。从GHC 7.6开始,在DataKinds
启用后,您可以使用类型级的自然语言和字符串,以及任何(非高级,非通用的)类型级元组,类型级列表和类型级提升。 ,非约束)代数数据类型,与C ++在模板中使用整数的能力类似(但比它更通用)。
为了进一步解释Ptharien's Flame很好地解释了当前状态-GHC Haskell似乎在每个版本的依赖类型(同时保持相分离)的方向上都进一步发展。
因此,例如,在今年9月的ICFP 2013上,应提交有关此过程下一阶段的论文,“走向依赖类型的Haskell:具有种类相等性的系统FC”,有关折叠种类和类型级别。正如3年前宣布的计划。
它甚至提到了下一步:“我们还知道,Adam Gundry即将发表的论文将在System FC版本中包含Π型,并且我们也希望在源语言中也提供此功能。(个人交流)”
传统上,Haskell曾尝试伪造它,但最终结果是一个更大,看似重复的类型系统。但这可能很快就会改变!看到: