14

Haskell WikiでGADTについて読み始めましたが、それを理解するのはあまり快適ではありませんでした。Haskell初心者のためにGADTを説明する特定の本の章またはブログ投稿をお勧めしますか?

4

4 に答える 4

16

Apfelmusは、役立つかもしれないGADTのビデオチュートリアルを作成しました。

于 2010-10-26T05:22:29.220 に答える
6

GHCマニュアルの例が好きです。シンプルで、いくつかの重要なポイントを示しています。

  • GADTを使用すると、Haskellの型システムを使用して、実装している言語(「オブジェクト言語」)の型システムをモデル化できます。

  • これにより、Haskellの静的チェックで、「コンパイラが合格」または「そうでないもの」が型を保持していることを表明できます。オブジェクト言語の用語を使用する関数は、それらの用語が適切に型指定されていると見なすことができます。適切に型指定された用語を生成するには、オブジェクト言語の用語を返す関数が必要です。

  • GADTコンストラクターのパターンマッチングにより、型が改良されます。 evalTerm a -> a全体的に型を持っていますが、左側のコンストラクターは型を持っていたので、の右側eval (Lit i)は型を持っています。IntTerm Int

  • Haskellシステムは、GADTコンストラクターにどのタイプを与えるかを気にしません。すべてのコンストラクターを同じように簡単に作成してdata Term a、タイプTerm a、またはTerm Bool、の結果を得ることができますが、dataそれでも定義は通過します。しかし、私たちは書くことができないでしょうeval :: Term a -> a。GADTの「タグタイプ」を選択し問題をモデル化し、記述したい便利な関数が適切に型付けされるようにします。

于 2010-10-26T00:41:57.787 に答える
1

その他のリンク:

于 2010-10-26T06:24:16.297 に答える
1

Haskell wikiのダミー用GADTは、私が見た中で最も良い説明です。

私(および他の人が思う)がほとんどの紹介で抱えている問題は、GADTを理解するまでは自明ではない構文の観点から、GADTの例を示していることです。これにより、すべてが構築されている最も単純な例を完全に理解するのが特に難しくなります。パターンの多くが何をしているのかを推測できますが、すべてのステートメントの正確な役割を理解することは困難です。

「fordummies」の投稿では、独自の基本的な例を説明する過程で構文の意味を分析して構築しているため、はるかに便利な出発点になります。私はそれを強くお勧めします。

于 2012-08-01T16:10:44.093 に答える