gpt4 book ai didi

haskell - 一个基本的 Monoid 定义给出 "No instance for (Semigroup MyMonoid) arising from the superclasses of an instance declaration"

转载 作者:行者123 更新时间:2023-12-03 14:47:43 24 4
gpt4 key购买 nike

我正在尝试使用联合操作将 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 定义给出 "No instance for (Semigroup MyMonoid) arising from the superclasses of an instance declaration",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53622428/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com