首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >丢失猫Functor[Future]实例

丢失猫Functor[Future]实例
EN

Stack Overflow用户
提问于 2017-04-13 09:29:12
回答 4查看 10.8K关注 0票数 25

我正在尝试使用OptionT将返回Future[Option[T]]的方法组合在一起进行理解。

代码语言:javascript
复制
import cats.data._
import cats.implicits._
import cats.instances.future._

for {
  data <- OptionT(repo.getData(id))
  ... 
}

我得到的编译器错误:

代码语言:javascript
复制
could not find implicit value for parameter F cats.Functor[scala.concurrent.Future]

这个最近的例子表示这是(曾经?)有可能。

OptionT中的文档也是如此

文档

我在这里错过了什么?

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-04-13 09:48:12

通过导入cats.implicits._,您实际上已经导入了cats.syntax.AllSyntaxcats.instances.AllInstances

试着只使用这些导入:

代码语言:javascript
复制
import cats.data._
import cats.implicits._

或者(根据你的需要):

代码语言:javascript
复制
import cats.data._
import cats.instances.future._

或更具体而言:

代码语言:javascript
复制
import cats.data._
import cats.instances.future.catsStdInstancesForFuture

你还可能需要:

代码语言:javascript
复制
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global

注意:当然,您必须在生产环境中隐式地提供一个实际的ExecutionContext

票数 36
EN

Stack Overflow用户

发布于 2018-08-22 19:32:03

在导入工作之后(在批准答案中也提到过),

代码语言:javascript
复制
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-corecats-kernel

代码语言:javascript
复制
libraryDependencies ++= Seq(
  "org.typelevel" %% "cats-core" % "1.1.0",
  "org.typelevel" %% "cats-kernel" % "1.2.0",

  "org.scalatest" %% "scalatest" % "3.0.4" % Test
)
票数 1
EN

Stack Overflow用户

发布于 2021-07-07 17:31:40

这个问题的原因可能是多方面的;我只是遇到了这个问题,因为我在范围内有两个隐式ExecutionContext,因此猫无法选择一个来提供Functor[Future]

代码语言:javascript
复制
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来解决这个问题,尽管删除全局执行上下文也是有效的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43388495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档