プロのfs2使いにとっては常識なんだろうけど、常識がないからこうして勉強している。
fs2: 3.9.2
import cats.effect.IO import fs2.Stream val heavyProcess: String => IO[Int] = ??? // すごい時間がかかって返ってくる val stream = Stream("The answer for everything", "The answer for nothing") val result: IO[Unit] = stream .evalMap(heavyProcess) .evalTap(IO.println) .compile .drain
このようにevalMap
にA => IO[B]
になるような関数を渡してやると、fs2はいい感じにIOを実行して、その結果をストリームに戻してくれる。なんらかの副作用を持つことを除けば、map
と同じだと思ってもらっていい。
ちなみに兄弟分としてevalTap
もあるが、これはIOを使った計算をするがストリームの値はそのまま素通りさせる。その名に違わず、副作用を持つtapをするという要素だ。