问题描述
为什么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?
解决方法
每个Monoid
也是Semigroup
。 Semigroup
不必具有标识元素,但每个也是Semigroup
的{{1}}都将始终具有一个(无需“知道”该概念)。
另一个示例:“整数加法”半组没有正式拥有标识元素(零)。它没有定义一个。但您仍然可以加3 + 0 = 3。