gpt4 book ai didi

用于选项的 Scala Monoid 组合器

转载 作者:行者123 更新时间:2023-12-05 09:18:47 25 4
gpt4 key购买 nike

假设我有如下的 Monoid 特征:

trait Monoid[A] {
def combine(a1: A, a2: A): A
def identity: A
}

现在如果我想为此写一个 optionMonoid,我可以这样写:

val optionMonoid1 = new Monoid[Option[A]] {
def combine(a1: Option[A], a2: Option[A2]) a1 orElse a2
def identity = None
}

这是因为我对选项中的内部类型一无所知。但是,如果我想让组合运算符真正组合 Option 中的内部类型怎么办?

最佳答案

一个选项:

trait Semigroup[A] {
def combine(a1: A, a2: A): A
}

trait Monoid[A] extends Semigroup[A] {
def identity: A
}

def optionMonoid2[A](implicit sgA: Semigroup[A]) = new Monoid[Option[A]] {
def combine(a1: Option[A], a2: Option[A2]) = (a1, a2) match {
case (Some(b1), Some(b2)) => Some(sgA.combine(b1, b2))
case _ => a1.orElse(a2)
}
def identity = None
}

验证幺半群定律成立很容易。

关于用于选项的 Scala Monoid 组合器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43516863/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com