仅累积Scalaz中的验证错误

Edm*_*984 5 scala scalaz

我是函数式编程工作的初学者,我有一系列ValidationNEL [A,B],我想将错误累积到新的ValidationNEL [A,B]中.这取决于B是来自遗留代码的可变数据结构这一事实,因此持有Seq [B]会过度.

我从其他帖子中了解到,通过序列方法可以累积错误和成功:处理Scalaz6验证列表

根据我的理解,一切都来写一个正确的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)
  }
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*rab 3

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

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