缺少Cats Functor [Future]实例

kos*_*tja 20 scala future monad-transformers scala-cats

我试图OptionT结合Future[Option[T]]在for-comprehension中返回的方法.

import cats.data._
import cats.implicits._
import cats.instances.future._

for {
  data <- OptionT(repo.getData(id))
  ... 
}
Run Code Online (Sandbox Code Playgroud)

我得到的编译器错误:

could not find implicit value for parameter F cats.Functor[scala.concurrent.Future]
Run Code Online (Sandbox Code Playgroud)

最近的这个例子表明这是(可能的).

拉动请求中的文档也是如此OptionT

Functor文件

我在这里错过了什么?

谢谢

Fed*_*tta 27

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

尝试只使用那些导入:

import cats.data._
import cats.implicits._
Run Code Online (Sandbox Code Playgroud)

或(根据您的需要):

import cats.data._
import cats.instances.future._
Run Code Online (Sandbox Code Playgroud)

或者更具体地说:

import cats.data._
import cats.instances.future.catsStdInstancesForFuture
Run Code Online (Sandbox Code Playgroud)

你可能还需要:

import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global
Run Code Online (Sandbox Code Playgroud)

注意:当然,您必须ExecutionContext在生产环境中隐式提供实际内容.

  • 删除导入cats.instances.future._并添加ExecutionContext修复此问题.谢谢你,费德里科. (4认同)
  • 我只使用`importcats.instances.future.catsStdInstancesForFuture`,并删除所有其他相关的cats导入,也可以修复这个错误 (2认同)