haskellには依存型がありますか?


20

Haskellには別の型よりも型をパラメーター化する機能が既にあることは知っています(C ++のテンプレートプログラミングに似ています)が、Haskellは値に対して型をパラメーター化することもできますか?依存型では、サイズnのベクトル、サイズn×mの行列など、整数でパラメータ化された型を使用できます。

そうでない場合は、なぜですか?また、将来サポートされる可能性はありますか?

回答:


18

Haskellには完全な依存型はありませんが、DataKindsやなどの拡張機能を使用すると非常に近いものになりTypeFamiliesます。現時点での問題は、私が知る限り、値レベルのHaskellには明確なボトムがありますが、タイプレベルのHaskellにはないということです。

これは、値DataKind-lifting など、他の型より型をパラメータ化することを妨げるものではありません。GHC 7.6以降、DataKinds有効にすると、型レベルの自然と文字列、および型レベルのタプル、型レベルのリスト、および任意の(非高次、非一般化の型レベルのリフティングを使用できます、制約なしの代数データ型。テンプレートで整数を使用するC ++の機能に似ています(ただし、より一般的です)。


1
GHC 8の今後の変更により、完全な依存型が追加されますか?
ヤヌストロエルセン

@JanusTroelsenまったくそうではありません。依存する種類を有効にします。
プサリアンの炎

8

Ptharien's Flameが現在の状態についてうまく説明していることを少し拡張するために、GHC Haskellは各バージョンで(相分離を維持しながら)依存型の方向にさらに進んでいるようです。

そのため、たとえば今年9月のICFP 2013では、このプロセスの次のフェーズに関するペーパー「依存型付けHaskellに向けて:種類の平等を伴うSystem FC」で、種類と型レベルの折りたたみについて説明します。されたいくつかの3年前の計画であることを発表しました

さらに、次のステップについても言及しています。「Adam Gundryの今後の論文にはSystem FCのバージョンにtypeタイプが含まれることに気づいています。この機能をソース言語でも利用できるようにしたいと思います。


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