В Scala with Cats:
import scala.concurrent.{Future, ExecutionContext}
implicit def futureFunctor
(implicit ec: ExecutionContext): Functor[Future] = …
Всякий раз, когда мы вызываем Functor for Future, либо напрямую, используя Functor.apply, либо косвенно через метод расширения карты, компилятор найдет futureFunctor неявным образомРазрешите и рекурсивно ищите ExecutionContext на сайте вызова.Вот как может выглядеть расширение:
// We write this:
Functor[Future]
// The compiler expands to this first:
Functor[Future](futureFunctor)
// And then to this:
Functor[Future](futureFunctor(executionContext))
Хорошо, я пробую это:
import scala.concurrent.{Future, ExecutionContext}
implicit def futureFunctor
(implicit ec: ExecutionContext): Functor[Future] = new Functor[Future] {
override def map[A, B](fa: Future[A])(f: A => B): Future[B] =fa map f
}
Functor[Future].map(Future.successful(2))(_+1)
Но получите исключение:
Ошибка: (29, 10) не удалось найти неявное значение для экземпляра параметра: cats.Functor [scala.concurrent.Future]
Functor [Future] .map (Future.successful (2)) (_ + 1)
Что я обычно исправляю как:
import cats.instances.future._
Но исправление не помогает.И я не должен импортировать его, потому что в области неявных futureFunctor
уже определены.
Что мне не хватает?