は、次のデータ型GADT用のモノイドインスタンスを作成することはできますか?
私はそれのためモノイドインスタンスを導出する方法を{-# LANGUAGE GADTs #-}
data Response a where
ResponseMap :: HashMap Text (Sum Int) -> Response (HashMap Text (Sum Int))
ResponseSum :: Sum Int -> Response (Sum Int)
を考えると?コンストラクタ
(ResponseSum v1) `mappend` (ResponseSum v2) = undefined
(ResponseMap v1) `mappend` (ResponseMap v2) = undefined
とのmappend
私ができるパターンマッチの定義について簡単に値を組み合わせるが、それは実際に可能だ、または理にかなっている場合、私は私がmempty
を実装する方法を参照するか、ないのですか?
あなたのGADTは実際にGADTではありません。 'newtype Response a = Response a'と似ていますが、' a'は 'Sum Int'や' HashMap Text(Sum Int) 'しかないので便利ではありません。 'newtype'を使用する場合は' GeneralizedNewtypeDeriving'を使用して無料の 'Monoid'インスタンスを取得することができます –
@BenjaminHodgsonもし私がnewtypeとして' Response a'を定義したら、それを知る関数を定義する方法がありますそれは何のために働いていますか? – ppb
私は古風な方法 'f ::レスポンス(Sum Int) - > Foo'を好きです –