基本的 Monoid 定义给出 "No instance for (Semigroup MyMonoid) 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’
我做错了什么?这看起来很简单,我正在复制我在 this 等示例中看到的语法,但我不明白为什么会出现此错误。
自从写完这篇游记后,(<>)
已从 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
我正在尝试将联合运算定义 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’
我做错了什么?这看起来很简单,我正在复制我在 this 等示例中看到的语法,但我不明白为什么会出现此错误。
自从写完这篇游记后,(<>)
已从 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