【发布时间】:2014-11-26 19:07:43
【问题描述】:
如果我有一个具有零和映射的 Monoid[T],那么在我看来,从逻辑上讲,
implicit myMonoid: Monoid[T] = ...
val x: T = thing()
val y: Option[T] = none[T]
val z: Option[T] = Some(value)
val a: T = x.mappend(y)
val b: T = x.mappend(z)
val i: T = y.mappend(x)
val j: T = z.mappend(x)
对于 a 和 b 应该分别是 identity 和 x.mappend(z.get)。对于 i 和 j 也是如此。
我现在的样子:
def combine(a: Option[T], b: Option[T]) = {
a match {
case None => b
case Some(x) => x |+| b.getOrElse(myMonoid.zero)
}
}
是否有预先存在的结构来表达这一点,或者这在数学上是不正确的?
【问题讨论】: