Monad 转换器 - Scalaz - List[Future[String\/String]] 到 Future[String\/String]

Monad transformers - Scalaz - List[Future[String\/String]] to Future[String\/String]

我想知道如何将 List[Future[String\/String]] 转换为 Future[String\/String]

其实我只是想申请列表的每个元素EitherT.apply

我想要的是这样的:

val result: EitherT[Future, String, String] =
    for{
        _                     <- EitherT.apply(fun(arg1))
        _                     <- EitherT.apply(fun(arg2))
        res                   <- EitherT.apply(fun(arg3))
    } yield res
result.run

// ...

def fun(arg1: MyType): Future[String\/String] = ...

在此示例中,我想将函数 fun 和函数 fun 的参数列表(包含 n 个元素)设置为输入(此处:List(arg1, arg2, arg3)) .

但我不知道如何使用 Futures 进行管理。 是否可以保持异步?

我找到了一种方法,但没有使用 EitherT.apply。

def seqCheck(elements: List[Element]): Future[String\/String] = elements match {
    case element :: tail  =>
        fun(element) flatMap {
            case \/-(_) =>
                seqCheck(tail)
            case -\/(e) => Future{
                -\/(e)
            }
        }
    case Nil                =>
        Future {
            \/-("Ok")
        }
}

它没有我想要的那么好,但它似乎有效。 如果有人知道最好的方法...