Lambdaカクテル

京都在住Webエンジニアの日記です

Invite link for Scalaわいわいランド

Scalaのfs2でIOの実行結果をストリームに戻すにはevalMapを使う

プロの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

このようにevalMapA => IO[B]になるような関数を渡してやると、fs2はいい感じにIOを実行して、その結果をストリームに戻してくれる。なんらかの副作用を持つことを除けば、mapと同じだと思ってもらっていい。

ちなみに兄弟分としてevalTapもあるが、これはIOを使った計算をするがストリームの値はそのまま素通りさせる。その名に違わず、副作用を持つtapをするという要素だ。

★記事をRTしてもらえると喜びます
Webアプリケーション開発関連の記事を投稿しています.読者になってみませんか?