【发布时间】:2020-01-06 22:53:03
【问题描述】:
我正在尝试使用 for-comprehension 和 EitherT 组合期货,但由于返回类型,我遇到了麻烦。请有人可以解释为什么这不能编译,我怎样才能让它编译改变理解?
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global
import cats.data.EitherT
import cats.implicits._
object CatsApp extends App {
case class L1(a: String)
case class L2(a: String)
case class L3(a: String)
case class R1(num: Int)
case class R2(num: Int)
case class R3(num: Int)
def func1: Future[Either[L1, R1]] = {
if (true) Future(Right(R1(1)))
else Future(Left(L1("A")))
}
def func2: Future[Either[L2, R2]] = {
if (true) Future(Right(R2(1)))
else Future(Left(L2("A")))
}
def func3(a: R1, b: R2): Future[Either[L3, R3]] = {
if (true) Future(Right(R3(a.num + b.num)))
else Future(Left(L3("A")))
}
def comp = {
for {
f1 <- EitherT(func1)
f2 <- EitherT(func2)
f3 <- EitherT(func3(f1, f2))
} yield f3
}
}
【问题讨论】:
标签: scala scala-cats for-comprehension