Monoid
和 Semigroup
type class 可用于累加或组合。
整数的相加操作,接受两个整数,产出一个:
1 + 2
相加操作具有 单位元 0,对于任意整数 a
满足 a + 0 == 0 + a == a
:
2 + 0
0 + 2
相加操作还满足 结合律,即:
(1 + 2) + 3 == 1 + (2 + 3)
相乘操作的 单位元 是 1:
1 * 3 == 3
3 * 1 == 3
相乘也满足 结合律:
(1 * 2) * 3 == 1 * (2 * 3)
也可以对字符串做 加法,其中加法具体操作为 拼接:
"One" ++ "Two"
拼接的 单位元 是空字符串:
"" ++ "Hello" == "Hello"
"Hello" ++ "" == "Hello"
拼接也满足 结合律:
("One" ++ "Two") ++ "Three" == "One" ++ ("Two" ++ "Three")
- 本例使用
++
做拼接,而不是+
,是为了保持与Sequence
的一致性