Scala fs2 Streams with Chunks and Tasks?

时间:2016-12-21 19:30:35

标签: scala scalaz-stream fs2

  // Simulated external API that synchronously returns elements one at a time indefinitely.
  def externalApiGet[A](): A = ???

  // This wraps with the proper fs2 stream that will indefinitely return values.
  def wrapGetWithFS2[A](): Stream[Task, A] = Stream.eval(Task.delay(externalApiGet))

  // Simulated external API that synchronously returns "chunks" of elements at a time indefinitely.
  def externalApiGetSeq[A](): Seq[A] = ???

  // How do I wrap this with a stream that hides the internal chunks and just provides a stream of A values.
  // The following doesn't compile. I need help fixing this.
  def wrapGetSeqWithFS2[A](): Stream[Task, A] = Stream.eval(Task.delay(externalApiGetSeq))

1 个答案:

答案 0 :(得分:1)

您需要将序列标记为Chunk,然后使用flatMap展平流。

def wrapGetSeqWithFS2[A](): Stream[Task, A] =
  Stream.eval(Task.delay(externalApiGetSeq()))
    .flatMap(Stream.emits)

(编辑简化解决方案)