将 List[Task[Boolean]] 转换为 EitherT[Task, Throwable, Unit]

Convert List[Task[Boolean]] to EitherT[Task, Throwable, Unit]

我有一个 List[Task[Boolean]],我需要把它变成一个 EitherT[Task, Throwable, Unit]

我有一个可能的解决方案是

EitherT(Task.delay(if (!allAsserts.contains(false)) \/-(()) else -\/(new Exception("BOOM"))))

但我想知道是否可以在不显式调用 Task.delay 的情况下创建 EitherT

也许上面的代码是正确的,但我只是想知道是否有其他选择。

也许是这个?

lazy val toDisjuction: List[Boolean] => \/[Throwable, Unit] = list =>
  if (list.forall(_ == true)) \/-(()) else -\/(new Exception("BOOM"))

val ltb: List[Task[Boolean]] = ???

EitherT(Task.gatherUnordered(ltb) map toDisjunction)

我想这就是我要找的......