Ich versuche, OptionT
zu verwenden, um Methoden zu kombinieren, die Future[Option[T]]
in einer verständlichen Form zurückgeben.
import cats.data._
import cats.implicits._
import cats.instances.future._
for {
data <- OptionT(repo.getData(id))
...
}
Der Compiler-Fehler, den ich bekomme:
could not find implicit value for parameter F cats.Functor[scala.concurrent.Future]
Dieses aktuelles Beispiel legt nahe, dass dies möglich ist (war?).
ebenso die Dokumente in der pull-Anforderung zum Hinzufügen von OptionT
und die Katzen Functor
docs
Was fehlt mir hier?
Vielen Dank
Durch den Import von cats.implicits._
importieren Sie tatsächlich cats.syntax.AllSyntax
und cats.instances.AllInstances
Verwenden Sie nur diese Importe:
import cats.data._
import cats.implicits._
oder (nach Ihren Bedürfnissen):
import cats.data._
import cats.instances.future._
oder genauer:
import cats.data._
import cats.instances.future.catsStdInstancesForFuture
sie können auch benötigen:
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global
Hinweis: Natürlich müssen Sie implizit eine tatsächliche ExecutionContext
in einer Produktionsumgebung angeben.
Nach Importen arbeiten für mich (auch in zugelassener Antwort ) erwähnt,
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
Das Wichtigste waren auch die Abhängigkeiten, während ich org.typelevel:cats:0.9.0
zusammen mit cats-core-1.1.0
verwendete, was Symbol 'type cats.kernel.instances.EqInstances' is missing from the classpath.
verursachte.
Musste älteren cats-0.9.0
entfernen und neueste cats-core
und cats-kernel
verwenden.
libraryDependencies ++= Seq(
"org.typelevel" %% "cats-core" % "1.1.0",
"org.typelevel" %% "cats-kernel" % "1.2.0",
"org.scalatest" %% "scalatest" % "3.0.4" % Test
)