[英]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.