尝试将类型别名与 EitherT 一起使用会出现编译错误
type FuEiErr[T] = Future[Either[Error, T]]
type FuEiErrInt = Future[Either[Error, Int]]
case class Error(msg: String)
def fA(x:Int): FuEiErr[Int] = Future(Right(x)) // compile error
def fB(x:Int): FuEiErr[Int] = Future(Right(x))
// def fA(x:Int): FuEiErrInt = Future(Right(x)) // ok
// def fB(x:Int): FuEiErrInt = Future(Right(x))
@main def TestEitherT(): Unit =
(for {
a <- EitherT(fA(7))
b <- EitherT(fB(42))
} yield { (b) }).value.map {
case Left(err) => println(s"Error: ${err.msg}")
case Right(res) => println(s"Result: ${res}")
}
出现错误“没有找到类型 cats.Functor[F] 的给定实例,用于类 EitherT 中方法映射的参数 F 其中: F 是具有约束的类型变量 >: [X0] =>> scala.concurrent.Future[Either[Error, X0]] scala.concurrent.Future[X0] 和 <: [_] =>> Any
感谢您的帮助!
仅类型参数未被推断。尝试一下
for {
a <- EitherT[Future, Error, Int](fA(7))
b <- EitherT[Future, Error, Int](fB(42))
}