私はXというコンテナ型を持っています。 X以上の異種リストが必要なので、そのコンストラクタはあるタイプの変数aに存在する型に存在します。しかし、私はそれがEqタイプのクラスのインスタンスであることを望みます。ハックなソリューションは次のようになります。 {-# LANGUAGE GADTs #-}
data X where X :: (Eq a, Show a) => a -> X
ins
Towards Observational Type Theoryの「5. Full OTT」の最後に、OTTでコーパス可能なコンストラクタのインデックス付きデータ型を定義する方法を示します。アイデアは次のようにパラメータにインデックス付きのデータ・タイプを有効にする基本的には次のとおりです。 data IFin : ℕ -> Set where
zero : ∀ {n} -> IFin
私は、GADTが "GADT付きの式"の例をインターネットに散らばって使用しようとするまで、GADTは素晴らしいと思った。 伝統的なADTは、無料でEqの外見上の定義上の平等を親切に提供します。 (非常に当然のことながら)私が手 data Expr a where
(:+:) :: (Show a, Eq a) => Expr a -> Expr a -> Expr a
(:-
このヒントは、Showのインスタンスの値のリストを作成することです。 GADTを使用して具体的なShowableタイプを作成する次のスニペットが見つかりました。 data Showable where Showable :: Show a => a -> Showable
instance Show Showable where
show (Showable x) = show x
私は、遅延評価を使用して無限シーケンスを処理するライブラリを作成しています。簡潔にするために、シーケンスの各用語のインデックスにOrdという制約をアサーションするために、一般化された代数データ型(GADT)を使用しています。したがって、次のtypechecks:予想通り {-# LANGUAGE GADTs #-}
data Term ix cff where
Term :: (Or
は、次のデータ型 私はそれのためモノイドインスタンスを導出する方法を {-# LANGUAGE GADTs #-}
data Response a where
ResponseMap :: HashMap Text (Sum Int) -> Response (HashMap Text (Sum Int))
ResponseSum :: Sum Int -> Respons