繁体   English   中英

指半群或单半群

[英]Refer to either Semigroup or Monoid

我尝试解决haskellbook中的练习,并创建了以下模块:

module Exercises where

import Data.Semigroup
import Data.Monoid
import Test.QuickCheck

data Trivial = Trivial deriving (Eq, Show)

instance Semigroup Trivial where
  _ <> _ = Trivial

instance Monoid Trivial where
  mempty = Trivial
  mappend x y = x <> y   

编译器抱怨:

file: 'file:///d%3A/haskell/chapter15/src/Exercises.hs'
severity: 'Error'
message: 'Ambiguous occurrence `<>'
It could refer to either `Data.Semigroup.<>',
                         imported from `Data.Semigroup' at src\Exercises.hs:3:1-21
                      or `Data.Monoid.<>',
                         imported from `Data.Monoid' at src\Exercises.hs:4:1-18'
at: '14,19'
source: ''

如何解决问题?

通常,你会

import Data.Monoid hiding ((<>))

(或者根本不导入Data.Monoid –正如Alec所说, Monoid类本身已经从Prelude导出了。)因此, x <> y表示x Data.Semigroup.<> y Data.Monoid ,因为Data.Monoid版本不在范围内。

或者,您可以导入合格的模块之一,例如

import qualified Data.Semigroup as SG
import Data.Monoid
import Test.QuickCheck

data Trivial = Trivial deriving (Eq, Show)

instance SG.Semigroup Trivial where
  _ <> _ = Trivial

instance Monoid Trivial where
  mempty = Trivial
  mappend x y = x SG.<> y

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM