Scala For循环顺序2平面图

时间:2018-10-03 10:55:24

标签: scala for-loop flatmap

我正在scala中使用.. yield来循环Future[Try[A]]类型的对象。 Scala中的for .. yield实现将使我能够在一个for循环中将外部容器(Future)和一个嵌套循环中的内部容器(Try)进行平面映射。

for {_a <- a
    _b <- b
} yield {
    for {__a <- _a
        __b <- _b
    } yield {
        someOP(__a, __b)
    }
}

我正在寻找一种在单个for循环中编写此代码的方法,也许像

for (__a <- a
     __b <- b
) yield {
    someOP(__a, __b)
}

或具有以下方法签名的某种遍历函数:

def traverse[G[_], F[_], A](z: F[G[List[A]]])(l: List[F[G[A]]]): F[G[List[A]]]

我确实意识到,如果我将F的类型称为Future,而将G的类型称为Try,那么我可以简单地编写一个满足我的要求的方法。但是我正在寻找一种通用方法,该方法可以说可以与OptionEither一起使用,或者可以与类中定义的flatMap操作类似,例如yield的工作方式

1 个答案:

答案 0 :(得分:1)

因此,您不能在理解中混入单子语境。

您可以尝试Scalaz monad变压器。

Scalaz monad transformers