Haskell WikiでGADTについて読み始めましたが、それを理解するのはあまり快適ではありませんでした。Haskell初心者のためにGADTを説明する特定の本の章またはブログ投稿をお勧めしますか?
4 に答える
Apfelmusは、役立つかもしれないGADTのビデオチュートリアルを作成しました。
GHCマニュアルの例が好きです。シンプルで、いくつかの重要なポイントを示しています。
GADTを使用すると、Haskellの型システムを使用して、実装している言語(「オブジェクト言語」)の型システムをモデル化できます。
これにより、Haskellの静的チェックで、「コンパイラが合格」または「そうでないもの」が型を保持していることを表明できます。オブジェクト言語の用語を使用する関数は、それらの用語が適切に型指定されていると見なすことができます。適切に型指定された用語を生成するには、オブジェクト言語の用語を返す関数が必要です。
GADTコンストラクターのパターンマッチングにより、型が改良されます。
eval
はTerm a -> a
全体的に型を持っていますが、左側のコンストラクターは型を持っていたので、の右側eval (Lit i)
は型を持っています。Int
Term Int
Haskellシステムは、GADTコンストラクターにどのタイプを与えるかを気にしません。すべてのコンストラクターを同じように簡単に作成して
data Term a
、タイプTerm a
、またはTerm Bool
、の結果を得ることができますが、data
それでも定義は通過します。しかし、私たちは書くことができないでしょうeval :: Term a -> a
。GADTの「タグタイプ」を選択して問題をモデル化し、記述したい便利な関数が適切に型付けされるようにします。
その他のリンク:
Haskell wikiのダミー用GADTは、私が見た中で最も良い説明です。
私(および他の人が思う)がほとんどの紹介で抱えている問題は、GADTを理解するまでは自明ではない構文の観点から、GADTの例を示していることです。これにより、すべてが構築されている最も単純な例を完全に理解するのが特に難しくなります。パターンの多くが何をしているのかを推測できますが、すべてのステートメントの正確な役割を理解することは困難です。
「fordummies」の投稿では、独自の基本的な例を説明する過程で構文の意味を分析して構築しているため、はるかに便利な出発点になります。私はそれを強くお勧めします。