0

如何将以下数据类型用于它的 Monoid 实例?

data Counts = Counts {
    binds   :: Int,
    returns :: Int,
    gets    :: Int,
    puts    :: Int
} deriving (Eq, Show)

例如,我想出类似的东西:

mempty  = Counts { 0, 0, 0, 0 }
(Counts { b, r, g, p }) mappend (Counts { b', r', g', p' })  = Counts { (b + b'), (r + r'), (g + g'), (p + p') }

但这给了我一个解析错误'0'......也许我做错了并且误解了数据类型/幺半群,但我无法弄清楚。如果有人可以帮助我,将不胜感激!

最好的问候,Skyfe。

4

1 回答 1

5

这有效:

Counts 0 0 0 0

这有效:

Counts {binds = 0, returns = 0, gets = 0, puts = 0}

这不起作用:

Counts {0, 0, 0, 0}

您要么必须放置方括号和字段名称,要么完全不使用方括号。非此即彼。

除此之外,您的方法看起来很理智。你只是把你的记录语法弄乱了。

于 2014-10-15T10:41:33.993 回答