質問

Haskell Wiki で GADT について読み始めましたが、よく理解できませんでした。Haskell 初心者向けに 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 の「タグ タイプ」を選択します あなたの これにより、作成したい便利な関数が適切に型付けされます。

scroll top