有没有一种很好的方法来处理Option [Monoid [T]] mappend操作?

时间:2014-11-26 19:07:43

标签: scala scalaz monoids

如果我有一个零和mappend的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)
    }
}

是否有预先存在的构造来表达这一点,或者这在数学上是不正确的?

1 个答案:

答案 0 :(得分:2)

如果我没弄错的话Option应该有一个幺半群,那么简单

def combine[T: Monoid](a: Option[T], b: Option[T]) = a |+| b

应该有用。