2016-11-07 37 views
0

我有一個List[Task[Boolean]],我需要把它變成一個EitherT[Task, Throwable, Unit]轉換列表[任務[布爾]]到EitherT [任務,可拋出,單元]

我有一個可能的解決方案是

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

,但我不知道是否有可能不進行顯式調用Task.delay創建EitherT

也許上面的代碼是正確的,但我只是想知道是否有其他選擇。

回答

0

也許這樣?

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) 

我想這就是我一直在尋找...