Подтвердить что ты не робот

Отсутствующий экземпляр Кошки Functor [Будущее]

Я пытаюсь использовать 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

и коты Functor документы

Что мне здесь не хватает?

Спасибо

4b9b3361

Ответ 1

Импортируя 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 в производственной среде.

Ответ 2

Следующий импорт работает для меня (также упоминается в утвержденном ответе),

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 вместе с cats-core-1.1.0 что Symbol 'type cats.kernel.instances.EqInstances' is missing from the classpath. что Symbol 'type cats.kernel.instances.EqInstances' is missing from the classpath.

Пришлось удалить старые cats-0.9.0 и использовать последние cats-core cats-kernel и 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
)