web-dev-qa-db-fra.com

instance manquante de Cct Functor [Future]

J'essaie d'utiliser OptionT pour combiner des méthodes renvoyant Future[Option[T]] dans un for-compréhension. 

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

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

L'erreur du compilateur que je reçois: 

could not find implicit value for parameter F cats.Functor[scala.concurrent.Future]

Cet exemple récent suggère que cela est (était?) Possible.

il en va de même pour la documentation dans la demande pull pour l'ajout de OptionT

et les cats Functor docs

Qu'est-ce que j'oublie ici?

Je vous remercie

17
kostja

En important cats.implicits._ vous importez déjà cats.syntax.AllSyntax et cats.instances.AllInstances

Essayez d'utiliser uniquement ces importations:

import cats.data._
import cats.implicits._

ou (selon vos besoins):

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

ou plus spécifiquement:

import cats.data._
import cats.instances.future.catsStdInstancesForFuture

vous pouvez aussi avoir besoin de:

import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global

Remarque: vous devez bien sûr implicitement fournir une valeur ExecutionContext réelle dans un environnement de production.

22

Les importations suivantes fonctionnent pour moi (également mentionné dans réponse approuvée ),

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

En outre, l’important était les dépendances car j’utilisais org.typelevel:cats:0.9.0 avec cats-core-1.1.0 qui causait Symbol 'type cats.kernel.instances.EqInstances' is missing from the classpath.

Je devais supprimer les anciens cats-0.9.0 et utiliser les derniers cats-core et 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