使用 Cats 组合不同类型的期货
Combining Futures of different types using Cats
我有不同类型的期货。
import cats.Cartesian
import cats.instances.future._
import cats.syntax.cartesian._
import scala.concurrent.Future
import cats.implicits._
val aF : Future[Either[X, Y]] = getFuture(...)
val bF : Future[Either[X, Y]] = getFuture(...)
val cF = Future[List[Long]] = getFuture2(...)
val combinedFuture = Cartesian.tuple3(aF, bF, cF)
combinedFuture match {case (a, b, c) =>
...
}
但是我得到一个错误
Error:(36, 44) could not find implicit value for parameter cartesian: cats.Cartesian[scala.concurrent.Future]
val combinedFuture = Cartesian.tuple3(aF, bF, cF)
但是正如你所看到的,我已经导入了所有隐式,intances.future._ 和语法。
我在 Scala 2.11.8 上使用 Cats 0.9.0
你错过了隐含的 ExecutionContext
:
import scala.concurrent.ExecutionContext.Implicits.global
我在 Future[T]
上使用类型 class 模式时多次发生这种情况,它总是很容易忘记的执行上下文,但使类型 class没有正确解析隐式。
我有不同类型的期货。
import cats.Cartesian
import cats.instances.future._
import cats.syntax.cartesian._
import scala.concurrent.Future
import cats.implicits._
val aF : Future[Either[X, Y]] = getFuture(...)
val bF : Future[Either[X, Y]] = getFuture(...)
val cF = Future[List[Long]] = getFuture2(...)
val combinedFuture = Cartesian.tuple3(aF, bF, cF)
combinedFuture match {case (a, b, c) =>
...
}
但是我得到一个错误
Error:(36, 44) could not find implicit value for parameter cartesian: cats.Cartesian[scala.concurrent.Future]
val combinedFuture = Cartesian.tuple3(aF, bF, cF)
但是正如你所看到的,我已经导入了所有隐式,intances.future._ 和语法。
我在 Scala 2.11.8 上使用 Cats 0.9.0
你错过了隐含的 ExecutionContext
:
import scala.concurrent.ExecutionContext.Implicits.global
我在 Future[T]
上使用类型 class 模式时多次发生这种情况,它总是很容易忘记的执行上下文,但使类型 class没有正确解析隐式。