Преобразование списка[задача [Boolean]] в EitherT[задача, Throwable, Unit]

У меня естьList[Task[Boolean]], и мне нужно превратить его в an EitherT[Task, Throwable, Unit].

У меня есть одно возможное решение, которое

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

но мне было интересно, можно ли создать EitherTбез явного вызова Task.delay.

Возможно, приведенный выше код верен, но мне просто интересно, есть ли альтернативы.

1 ответ

  1. Может это?

    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)
    

    Я думаю, что это то, что я искал …