我正在尝试使用OptionT将返回Future[Option[T]]的方法组合在一起进行理解。
import cats.data._
import cats.implicits._
import cats.instances.future._
for {
data <- OptionT(repo.getData(id))
...
}我得到的编译器错误:
could not find implicit value for parameter F cats.Functor[scala.concurrent.Future]这个最近的例子表示这是(曾经?)有可能。
OptionT中的文档也是如此
和文档
我在这里错过了什么?
谢谢
发布于 2017-04-13 09:48:12
通过导入cats.implicits._,您实际上已经导入了cats.syntax.AllSyntax和cats.instances.AllInstances
试着只使用这些导入:
import cats.data._
import cats.implicits._或者(根据你的需要):
import cats.data._
import cats.instances.future._或更具体而言:
import cats.data._
import cats.instances.future.catsStdInstancesForFuture你还可能需要:
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global注意:当然,您必须在生产环境中隐式地提供一个实际的ExecutionContext。
发布于 2018-08-22 19:32:03
在导入工作之后(在批准答案中也提到过),
import cats.data.OptionT
import cats.instances.future._ // or import cats.implicits._
// as implicits include FutureInstances
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global另外,重要的是依赖关系,因为我使用的是org.typelevel:cats:0.9.0和导致Symbol 'type cats.kernel.instances.EqInstances' is missing from the classpath.的cats-core-1.1.0。
必须删除旧的cats-0.9.0,并使用最新的cats-core和cats-kernel。
libraryDependencies ++= Seq(
"org.typelevel" %% "cats-core" % "1.1.0",
"org.typelevel" %% "cats-kernel" % "1.2.0",
"org.scalatest" %% "scalatest" % "3.0.4" % Test
)发布于 2021-07-07 17:31:40
这个问题的原因可能是多方面的;我只是遇到了这个问题,因为我在范围内有两个隐式ExecutionContext,因此猫无法选择一个来提供Functor[Future]。
import scala.concurrent.ExecutionContext.Implicits.global
// ^ first implicit ExecutionContext
class MyClass {
def myMethod(e: EitherT[Future, _, _])(implicit ec: ExecutionContext) {
// Second implicit ExecutionContext
e.flatMap(...) // <- Functor unavailable
}
}在我的例子中,我能够通过不将ec传递到myMethod来解决这个问题,尽管删除全局执行上下文也是有效的。
https://stackoverflow.com/questions/43388495
复制相似问题