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
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.
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
)