scala – Cats Seq [Xor [A,B]] => Xor [A,Seq [B]]

前端之家收集整理的这篇文章主要介绍了scala – Cats Seq [Xor [A,B]] => Xor [A,Seq [B]]前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一系列错误或视图(Seq [Xor [Error,View]])

我想将其映射到第一个错误(如果有)或视图序列的Xor
(Xor [Error,Seq [View]])或者可能只是(Xor [Seq [Error],Seq [View])

我怎样才能做到这一点?

解决方法

您可以使用bitraverse语法提供的sequenceU,类似于 scalaz.虽然Seq似乎不存在正确的类型类,但您可以使用List.

import cats._,data._,implicits._,Syntax.bitraverse._

case class Error(msg: String)

case class View(content: String)

val errors: List[Xor[Error,View]] = List(
  Xor.Right(View("abc")),Xor.Left(Error("error!")),Xor.Right(View("xyz"))
)

val successes: List[Xor[Error,Xor.Right(View("xyz"))
)

scala> errors.sequenceU
res1: cats.data.Xor[Error,List[View]] = Left(Error(error!))

scala> successes.sequenceU
res2: cats.data.Xor[Error,List[View]] = Right(List(View(abc),View(xyz)))

猜你在找的Scala相关文章