Высокий уровень, что мне нужно сделать для портирования ReactiveMon go scala для использования эффектов котов? - PullRequest
1 голос
/ 13 июля 2020

Правильно ли сказать, что если я захочу использовать ReactiveMon go в чем-то вроде http4s, мне придется обернуть все вызовы Future, которые возвращает ReactiveMon go, в эффект Cats IO?

At на высоком уровне, какие шаги мне потребуются для включения ReactiveMon go в http4s?

1 Ответ

2 голосов
/ 14 июля 2020

Cats Effect предоставляет класс типов Async, который позволяет вам преобразовывать некоторые обратные вызовы (например, onComplete Future) в F. Пример из документации :

import cats.effect.{IO, Async}

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

val apiCall = Future.successful("I come from the Future!")

val ioa: IO[String] =
  Async[IO].async { cb =>
    import scala.util.{Failure, Success}

    apiCall.onComplete {
      case Success(value) => cb(Right(value))
      case Failure(error) => cb(Left(error))
    }
 }

ioa.unsafeRunSync()

На самом деле, Async[F] evan имеет метод, позволяющий поднять Future до asyn c: Async[F].fromFuture(Sync[F].defer(future)) (Future завернут в IO поскольку его создание имеет побочные эффекты и запускает активные вычисления).

Однако, если вы настроены на использование cats.effect.IO, вы можете просто использовать IO.fromFuture(IO(future)).

Вам придется используйте это (или какую-нибудь утилиту, делегирующую это) везде, где вам нужно перевести Future в IO (или другой F).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...