0

为什么 Semigroup 有 Option 类型而 None 表现得像 Monoid 中的中性元素?

val two: Option[Int] = Option(2)
val n: Option[Int] = None

n |+| two should be(Some(2))//why do we have the opportunity to do this?
two |+| n should be(Some(2))//n look like neutral here

Semigroup[Option[Int]].combine(Option(1), None) should be(Some(1))//why does semigroup has it?
4

1 回答 1

2

每一个Monoid也是一个SemigroupSemigroup不必有一个身份元素,但每一个Semigroup也是一个身份的元素Monoid总是会有一个(不“知道”这个概念)。

另一个例子:“整数加法”半群没有正式拥有一个单位元素(零)。它没有定义一个。但是你仍然可以添加 3 + 0 = 3。

于 2020-09-02T19:46:33.217 回答