Reputation: 3632
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
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
Reputation: 51713
Try
fs2.Stream.eval(output).flatMap(x => fs2.Stream.apply(x: _*))
What does `:_*` (colon underscore star) do in Scala?
Upvotes: 4