it-swarm.com.ru

отсутствует экземпляр Cats Functor [Future]

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

Этот недавний пример предполагает, что это (было?) Возможно.

как и документы в запросе pull для добавления OptionT

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

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

Спасибо

17
kostja

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

22
Federico Pellegatta

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

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.

Пришлось удалить старый 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
)
0
prayagupd