基本的Monoid定义给出“没有实例实例声明的超类引起的(Semigroup MyMonoid)实例". [英] A basic Monoid definition gives "No instance for (Semigroup MyMonoid) arising from the superclasses of an instance declaration"
本文介绍了基本的Monoid定义给出“没有实例实例声明的超类引起的(Semigroup MyMonoid)实例".的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试将联合操作的Haskell整数集定义为 Monoid .
I am attempting to define Haskell integer sets with the union operation as a Monoid.
module MyMonoid where
import qualified Data.IntSet as S
data MyMonoid = MyMonoid S.IntSet
instance Monoid MyMonoid where
mempty = MyMonoid S.empty
MyMonoid m1 `mappend` MyMonoid m2 = MyMonoid (S.union m1 m2)
我得到了错误
• No instance for (Semigroup Markup)
arising from the superclasses of an instance declaration
• In the instance declaration for ‘Monoid MyMonoid’
我做错了什么?这似乎很简单,我正在复制在此,但我看不到为什么会发生此错误.
What am I doing wrong? This seems so simple, and I'm copying the syntax I see in examples like this, but I can't see why this error is occurring.
推荐答案
自编写导览以来,(<>)
已从Monoid移到Semigroup,并且所有Monoid实例也必须也是Semigroup. mappend
只是(<>)
的同义词.因此,您需要两个实例:
Since that tour was written, (<>)
has been moved from Monoid to Semigroup, and all Monoid instances are required to also be Semigroup. mappend
is just a synonym for (<>)
. So, you need two instances:
instance Semigroup MyMonoid where
MyMonoid m1 <> MyMonoid m2 = MyMonoid (S.union m1 m2)
instance Monoid MyMonoid where
mempty = MyMonoid S.empty
这篇关于基本的Monoid定义给出“没有实例实例声明的超类引起的(Semigroup MyMonoid)实例".的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文