Doobie通过ConnectionIO程序列表进行事务处理

Las*_*asf 1 scala scala-cats doobie

假设我有一个Doobie程序列表(全部带有Unit类型参数,fwiw):

val progList: List[ConnectionIO[Unit]] = prog1 :: prog2 :: ... :: Nil
Run Code Online (Sandbox Code Playgroud)

我有什么办法可以在一个事务中运行它们?理解在这里行不通,因为我只知道运行时程序列表的确切组成。基本上,我想我应该将它们折叠在一起。

我想这个问题通常适用于Cats中的Free Monad,因此我也将Cats标记为。谢谢。

Alv*_*sco 6

您可以使用.sequencecats 来做到这一点:

import doobie.implicits._
import cats.implicits._

...

val res = progList.sequence // ConnectionIO[List[Unit]]
Run Code Online (Sandbox Code Playgroud)