cats-effect:如何将`List [IO]`转换为`IO [List]`

nam*_*nam 6 io scala scala-cats

我创建了一个列表,IO[Unit]以便从URL列表中检索数据.但现在我如何将它转换回单一IO[Unit]

Dmy*_*tin 12

您可以通过以下方式执行此操作

val x: List[IO[Unit]] = ???

import cats.implicits._

val y: IO[List[Unit]] = x.sequence

val z: IO[Unit] = y.map(_ => ())
Run Code Online (Sandbox Code Playgroud)

  • 另外,您可以将.map(_ =>())替换为.void(尽管下面提到的sequence_较短)。参见[scaladoc](https://typelevel.org/cats/api/cats/Functor.html#void [A](fa:F [A]):F [Unit]) (2认同)

Luk*_*itz 7

这只是Dmytro已经说过的内容,你实际上可以通过使用traverse_或者一步完成sequence_.如果您不关心结果,这两个都非常有用.代码看起来像这样:

import cats.implicits._

val x: List[IO[Unit]] = ???

val y: IO[Unit] = x.sequence_
Run Code Online (Sandbox Code Playgroud)