我是函数式编程工作的初学者,我有一系列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时,我非常困惑.我甚至无法找出哪个应用程序允许在验证中累积失败和成功.
晚了,但从 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)
| 归档时间: |
|
| 查看次数: |
948 次 |
| 最近记录: |