为什么Haskell不具有类型级别的lambda抽象?


22

是否有一些理论上的原因(例如类型检查或类型推断变得不确定)或实际原因(太难于正确实现)?

目前,我们可以换东西到newtype

newtype Pair a = Pair (a, a)

然后有 Pair :: * -> *

但是我们不能做这样的事情λ(a:*). (a,a)

(有一些语言可以使用它们,例如Scala可以。)


4
选择一种类型的系统会使用另一种类型的系统,因为整个过程需要保持一致。类型级别的lambda在类别理论中会非常奇怪...
tp1

Answers:


17

使用类型级别lambda进行类型推断将需要更高阶的统一性,这是无法确定的。这是不允许他们这样做的动机。但是,就像其他不确定的功能(如GADT的类型推断)一样,可能需要类型签名并允许它。我不确定是否有人对此进行了调查。

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.