Я пытаюсь составить монады в Scala, выполняя некоторые запросы к серверу. вот фрагмент кода, который я использую. Я стараюсь не использовать плоскую карту, насколько это возможно, только для понимания. Любые идеи? Я знаю, как использовать Monad Transformers, но я не знаю, как составить несколько монад. Может кто-нибудь мне помочь?
for {
session <- getSession(ticker) //IO[Future[Response]]
crumbF = session.flatMap(response => Future(parseCrumb(response.body)))
cookiesF = session.flatMap(response => Future(response.cookies))
crumb = Await.result(crumbF, 5 seconds) // Future[String]
cookies = Await.result(cookiesF, 5 seconds) //Future[Seq[Cookies]]
data <- getData(ticker, startDate, endDate, interval, crumb, cookies.head) // IO[Future[Response]]
stocksF = data.flatMap { response =>
import DefaultBodyReadables._
Future {
StockDf.mapDataToDf(response.body)
}
}
} yield stocksF
Future
сOption
внутри, или вы пытаетесь работать с разными монадами в одномfor
понимании? - person Grisha   schedule 23.10.2018for
. Все эти присваивания и операторыAwait
были бы понятнее, если бы они были написаны как обычный код. В конце концов, это всего лишьmap
, вложенное вflatMap
, и, вероятно, написанное таким образом выглядело бы яснее. И зачем вызыватьflatMap
и заключать результат вFuture
, а не просто вызыватьmap
? - person Tim   schedule 23.10.2018