Я использую for .. yield в scala для зацикливания объектов типа Future[Try[A]]
.Реализация for .. yield в scala позволит мне отобразить внешний контейнер (Future) в один для цикла loop и внутренний контейнер (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]]]
Я понимаю, что если я скажу typeF
как Future
и тип G
как Try
, тогда я могу просто написать метод, который удовлетворяет моему требованию.Но я искал универсальный метод с, скажем, работой с Option
и Either
или похожим с операцией flatMap
, определенной в их классе, например, как работает yield