Haskellに型レベルのラムダ抽象化がないのはなぜですか?


22

それにはいくつかの理論的な理由(型チェックや型推論が決定不能になるなど)か、実際的な理由(適切に実装するのが難しすぎる)がありますか?

現在、我々はに物事をラップすることができますnewtypeように

newtype Pair a = Pair (a, a)

そして、持っている Pair :: * -> *

しかし、私たちのようなことはできませんλ(a:*). (a,a)

(例えば、Scalaが持っているような、それらを持っているいくつかの言語があります。)


4
1つの種類のシステムを選択して使用すると、他の種類のタイプシステムは除外されます。これは、全体を一貫させる必要があるためです。型レベルのラムダは、カテゴリー理論では非常に奇妙です...
tp1

回答:


17

型レベルのラムダによる型推論には、決定不能な高次の統一が必要です。これは、それらを許可しない動機です。ただし、他の決定不能な機能(GADTの型推論など)で発生したように、型署名を要求して許可することもできます。それが誰かによって調査されているかどうかはわかりません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.