gpt4 book ai didi

scala - 在 Scalaz 中仅累积验证错误

转载 作者:行者123 更新时间:2023-12-04 19:11:05 27 4
gpt4 key购买 nike

我是函数式编程工作的初学者,我有一个 ValidationNEL[A,B] 序列,我想将错误累积到一个新的 ValidationNEL[A,B] 中。这取决于B
是来自遗留代码的可变数据结构,因此保存 Seq[B] 会显得过于冗长。

我从其他帖子中了解到,通过序列方法可以累积错误和成功:Processing a list of Scalaz6 Validation

根据我的理解,这一切都需要编写一个合适的 Applicative 和一个合适的 Traverse。

  trait MA[M[_], A] extends PimpedType[M[A]] with MASugar[M, A] {

def sequence[N[_], B](implicit a: A <:< N[B], t: Traverse[M], n: Applicative[N]): N[M[B]] =
traverse((z: A) => (z: N[B]))

def traverse[F[_],B](f: A => F[B])(implicit a: Applicative[F], t: Traverse[M]): F[M[B]] =
t.traverse(f, value)
}

我该如何开始?当我试图查看 Scalaz 源代码以找出如何实现我的 Applicative 时,我感到非常困惑。我什至无法找出哪个应用程序允许在验证中累积失败和成功。

最佳答案

迟到了,但从 Scalaz 7.0.4 开始,我们可以这样做:

  def takeLastSuccess[A, B](seq: Seq[ValidationNel[A, B]]) = {
implicit val useLast = Semigroup.lastSemigroup[B]
seq reduceLeft (_ +++ _)
}

关于scala - 在 Scalaz 中仅累积验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14939473/

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