如何在fs2 Stream [IO,Byte]中使用“ writeOutputStream”

时间:2018-11-13 20:38:44

标签: scala aws-lambda fs2

我正在尝试使用fs2.io.writeOutputStream来输出到Java AWS lambda fn。我不知道如何提供它正在寻找的隐式参数:

  

“找不到参数cs的隐式参数:ContextShift [IO]”

我找到了一些documentation来创建自己的隐式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 :(得分:2)

  

“默认情况下,Cats Effect可以提供ContextShift [IO]实例来管理线程池,但前提是范围内存在ExecutionContext或使用IOApp。”

-猫效果documentation

来自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]]
  }
}