我正在使用 cats ,想知道怎么用它转一个数据。
从
val data = Either[Error, Option[Either[Error, Account]]]
到
val target: Either[Error, Option[Account]] = howToConvert(data)
如果有的话
Error
发生,结果将是 Left(error)
第一个出现的错误。我现在可以这样做:
data match {
case Left(e) => Left(e)
case Right(Some(Right(y))) => Right(Some(y))
case Right(Some(Left(e))) => Left(e)
case Right(None) => Right(None)
}
但我正在寻找一些简单的方法
最佳答案
最简单的方法是sequence
内Option
,这样你就会得到一个 Either[Error, Either[Error, Option[Account]]]
然后将其压平。
使用猫语法,这真的很容易:
import cats.implicits._
val target: Either[Error, Option[Account]] =
data.flatMap(_.sequence)
澄清一下,
sequence
将类型构造函数“由内而外”,意味着内部 Option[Either[Error, Account]]
变成了 Either[Error, Option[Account]]
.
关于scala - 如何使用类型级别的猫将 `Either[Error, Option[Either[Error, Account]]]` 转换为 `Either[Error, Option[Account]]`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48257004/