Haskell数据类型计数状态Monad

时间:2014-10-15 10:37:28

标签: haskell monads monoids

如何为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。

1 个答案:

答案 0 :(得分:5)

这有效:

Counts 0 0 0 0

这有效:

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

这不起作用:

Counts {0, 0, 0, 0}

您必须将括号和字段名称放在一起,或者完全不使用括号。一个或另一个。

除此之外,你的方法看起来很健全。你刚刚记录了你的记录语法。