EitherT 与 Scala 类型别名

问题描述 投票:0回答:1

尝试将类型别名与 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

感谢您的帮助!

scala types alias scala-cats either
1个回答
0
投票

仅类型参数未被推断。尝试一下

for {
  a <- EitherT[Future, Error, Int](fA(7))
  b <- EitherT[Future, Error, Int](fB(42))
}
© www.soinside.com 2019 - 2024. All rights reserved.