DeriveFunctor
GHC には などのいくつかの言語フラグがありDeriveDataTypeable
、Haskell 98 で許可されている型クラス以外の型クラスの派生インスタンスをコンパイラで生成できますFunctor
。自然な」派生インスタンス。
では、なぜ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) ...