![](/img/trans.png)
[英]Could not deduce (Semigroup (Optional a)) arising from the superclasses of an instance declaration
[英]A basic Monoid definition gives "No instance for (Semigroup MyMonoid) arising from the superclasses of an instance declaration"
我试图用联合操作将 Haskell 整数集定义为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’
我究竟做错了什么? 这看起来很简单,我复制的语法我像例子中看到这个,但我不明白为什么这个错误发生。
自从写完那篇游记以来, (<>)
已经从 Monoid 移到了 Semigroup,并且所有 Monoid 实例也必须是 Semigroup。 mappend
只是(<>)
的同义词。 因此,您需要两个实例:
instance Semigroup MyMonoid where
MyMonoid m1 <> MyMonoid m2 = MyMonoid (S.union m1 m2)
instance Monoid MyMonoid where
mempty = MyMonoid S.empty
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.