Typeclassopedia对Monoids的评论:
since we can’t have two instances for the same type,
Data.Monoid provides two newtype wrappers, Sum and Product,
with appropriate Monoid instances.
> getSum (mconcat . map Sum $ [1..5])
15
> getProduct (mconcat . map Product $ [1..5])
120
为什么使用newtype
包装而不是data
?
注意 - 我发现这个question很有用,但我找不到答案。