2017-04-13 1 views
7

Ich versuche OptionT zu verwenden Methoden zu kombinieren, die Future[Option[T]] in einem Verständnis zurückgeben.fehlt Cats Functor [Future] Instanz

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

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

Der Compiler-Fehler Ich erhalte:

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

Diese recent example legt nahe, dass dies (war?) Möglich.

tun, damit die Dokumente in den pull request for adding OptionT

und die cats Functor docs

Was soll ich hier fehlt?

Danke

Antwort

10

von cats.implicits._ importieren Sie eigentlich schon cats.syntax.AllSyntax und cats.instances.AllInstances Import

Versuchen Sie es mit nur diese Importe:

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

oder (nach Bedarf):

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

können Sie auch benötigen:

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

Hinweis: natürlich implizit müssen eine tatsächliche ExecutionContext in einer Produktionsumgebung bereitstellen.

+3

Entfernen von Import cats.instances.future._ und das Hinzufügen des ExecutionContext behoben dies. Danke, Federico. – kostja

+0

Ich benutze 'import cats.instances.future.catsStdInstancesForFuture' nur, und entferne alle anderen verwandten Katzen Importe, kann diesen Fehler auch beheben – Freewind