nam
nam

Reputation: 3632

How to convert a Stream[IO, List[A]] to Stream[IO, A]

I want to parse a json file which output a collection of A. The signature of the Output is IO[List[A]]

How can I convert this value to a Stream: Stream[IO, A] ? I can convert to a Stream[IO, List[A]] but it is not what I want

fs2.Stream.eval(input).flatMap(x => fs2.Stream.apply(x)) Thanks

Upvotes: 6

Views: 3037

Answers (2)

Daenyth
Daenyth

Reputation: 37461

You can also use Stream.emits, which accepts a Seq, so fs2.Stream.eval(output).flatMap(fs2.Stream.emits(_)).

This is more efficient than using varargs with apply because it avoids wrapping and unwrapping the sequence structure - this can save a lot in the case of specialized primitive collections.

Edit: As of more recent fs2 versions (3.9.x as I write this) there's a convenience method for this now

def input: IO[List[Foo]] = ???
fs2.Stream.evalSeq(input) // Stream[IO, Foo]

Upvotes: 13

Dmytro Mitin
Dmytro Mitin

Reputation: 51713

Try

fs2.Stream.eval(output).flatMap(x => fs2.Stream.apply(x: _*))

What does `:_*` (colon underscore star) do in Scala?

Upvotes: 4

Related Questions