簡體   English   中英

一個基本的 Monoid 定義給出了“(Semigroup MyMonoid) 沒有由實例聲明的超類產生的實例”

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM