Scala для цикла заказа 2 flatmap - PullRequest
0 голосов
/ 03 октября 2018

Я использую 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

1 Ответ

0 голосов
/ 03 октября 2018

Таким образом, вы не можете смешивать монадические контексты для понимания.

Вы можете попробовать монадные преобразователи Scalaz.

Монадные преобразователи Scalaz

...