in Haskell, ich möchte ein Schriftsteller Monade eine Instanz eines Monoid machen:Monoid Instanz von Writer (Haskell)
instance (Monoid a) => Monoid (Writer (Sum Int) a) where
mempty = return mempty
w1 `mappend` w2 = writer((s++t, s'++t'), Sum (m+n)) where
((s,s'), Sum m) = runWriter w1
((t,t'), Sum n) = runWriter w2
also intuitiv, wenn die „Daten“ Typ des Writer Monade ein Monoid, möchte ich auch die ganze Writer etwas wie ein Monoid der Lage sein, zu prüfen (wie durch mempty und mappend implementiert
Dies funktioniert nicht, aber:. Der GHCI Compiler sagt
Illegal instance declaration for `Monoid (Writer (Sum Int) a)'
(All instance types must be of the form (T t1 ... tn)
where T is not a synonym.
Use -XTypeSynonymInstances if you want to disable this.)
In the instance declaration for `Monoid (Writer (Sum Int) a)'
und ich wirklich nicht weiß, welcher Typ hier ein Synonym sein soll und wie ich den Regeln des Compilers entsprechen kann.
Entsprechen Sie nicht den Regeln: entspannen Sie sie, indem Sie '-XTypeSynonymInstances' aktivieren, wie der Compiler vorschlägt. "-XFlexiblesInstances" kann ebenfalls erforderlich sein. – user2407038