Haskell数据类型计数状态Monad

use*_*349 0 monads haskell monoids

如何为Monoid实例使用以下数据类型?

data Counts = Counts {
    binds   :: Int,
    returns :: Int,
    gets    :: Int,
    puts    :: Int
} deriving (Eq, Show)
Run Code Online (Sandbox Code Playgroud)

我想像这样的东西:

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') }
Run Code Online (Sandbox Code Playgroud)

但是这给了我一个'0'的解析错误......也许我完全错了,误解了数据类型/ monoid,但我无法弄明白.如果有人能帮助我,我将不胜感激!

最好的问候,Skyfe.

Mat*_*hid 5

这有效:

Counts 0 0 0 0
Run Code Online (Sandbox Code Playgroud)

这有效:

Counts {binds = 0, returns = 0, gets = 0, puts = 0}
Run Code Online (Sandbox Code Playgroud)

这不起作用:

Counts {0, 0, 0, 0}
Run Code Online (Sandbox Code Playgroud)

您要么必须放置括号和字段名称,要么完全保留括号.非此即彼.

除此之外,你的方法看起来很健康.你只是把你的记录语法搞砸了.