如何为Monoid实例使用以下数据类型?
data Counts = Counts {
binds :: Int,
returns :: Int,
gets :: Int,
puts :: Int
} deriving (Eq, Show)
E.g。我想像:
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'的解析错误......也许我完全错了,误解了数据类型/ monoid,但我无法弄明白。如果有人能帮助我,我会非常感激!
祝你好运, Skyfe。
答案 0 :(得分:5)
这有效:
Counts 0 0 0 0
这有效:
Counts {binds = 0, returns = 0, gets = 0, puts = 0}
这不起作用:
Counts {0, 0, 0, 0}
您必须将括号和字段名称放在一起,或者完全不使用括号。一个或另一个。
除此之外,你的方法看起来很健全。你刚刚记录了你的记录语法。