Как использовать "writeOutputStream" с потоком fs2 [IO, Byte] - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь использовать fs2.io.writeOutputStream для вывода в Java AWS лямбда-фн.Я не знаю, как предоставить неявный параметр, который он ищет:

"не найдено никаких последствий для параметра cs: ContextShift [IO]"

Я нашел несколько документация для создания моего собственного неявного объекта ContextShift, но это кажется излишним из-за того, что я пытаюсь сделать.

final def handleRequest(in: InputStream, out: OutputStream, context: Context): Unit = (for {
  bytes <- in.compile.toList
  str   =  getString(bytes)
  args  <- decode(str).raiseIO
  _     <- produce(args).to(writeOutputStream(IO(out), global)).compile.drain
} yield Unit).unsafeRunAsyncAndForget() // throws exception in the case of Failure
// ------------------------------------------------
// produce(args: MyCaseClass): fs2.Stream[IO, Byte]

1 Ответ

0 голосов
/ 14 ноября 2018

"По умолчанию Cats Effect может предоставить экземпляр ContextShift [IO], который управляет пулами потоков, но только если в области есть ExecutionContext или используется IOApp."

- Кошачий эффект документация .

Из ExecutionContext.

import cats.effect.{IO, ContextShift}
import scala.concurrent.ExecutionContext.Implicits.global

val contextShift = IO.contextShift(global)

Использование IOApp.

import cats.effect.{IO, IOApp, ContextShift}

object Main extends IOApp {
  override def run(args: List[String]): IO[ExitCode] = {
     val cs = implicitly[ContextShift[IO]]
  }
}
...