2017-04-13 2 views
7

J'essaie d'utiliser OptionT pour combiner des méthodes retournant Future[Option[T]] dans une for-comprehension.missing Cats Functor [Future] instance

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

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

L'erreur du compilateur Je reçois:

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

Cette recent example suggère que c'est (était?) Possible.

donc faire les docs dans le pull request for adding OptionT

et cats Functor docs

Que suis-je manque ici?

Merci

Répondre

10

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

Essayez d'utiliser seulement ces importations:

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

ou (selon vos besoins):

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

vous pouvez aussi avoir besoin:

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

Note: Bien sûr, vous devez fournir implicitement une ExecutionContext réelle dans un environnement de production.

+3

En supprimant import cats.instances.future._ et en ajoutant l'ExecutionContext corrigé cela. Merci, Federico. – kostja

+0

J'utilise 'import cats.instances.future.catsStdInstancesForFuture' seulement, et supprimer toutes les autres importations de chats connexes, peut corriger cette erreur aussi – Freewind