GHCには、DeriveFunctor
,DeriveDataTypeable
などのようないくつかの言語フラグがあり、Haskell 98で許可されている以外の型クラスの派生インスタンスのコンパイラ生成を可能にします。これは、Functor
のようなものに対して特に意味があります。明らかに自然な派生インスタンスを指示します。なぜGHCはMonoidのインスタンスを派生できないのですか?
なぜ、Monoid
はありませんか?これは、単一のデータコンストラクタを持つ任意のデータ型のように思える:
data T = MkT a b c ...
は、一つは機械的(擬似コードを言い訳)Monoid
インスタンスを生成できます。
instance (Monoid a, Monoid b, Monoid c, ...) => Monoid T where
mempty =
MkT mempty mempty mempty ...
mappend (MkT a1 b1 c1 ...) (MkT a2 b2 c2 ...) =
MkT (mappend a1 a2) (mappend b1 b2) (mappend c1 c2) ...
私はderiveパッケージprovides thisことを認識してよ、私の質問は、GHCがなぜそうでないのかということです。
@sdcvvc:これは質問に対する有効な回答のようです。おそらくあなたはそれをそのように掲示するべきですか? –
OK、私は答えました。 – sdcvvc
通常、「Functor」インスタンスを作成するための賢明な方法があります。 「モノイド」についても同じことが当てはまりません。 – augustss