1 package org.make.api.technical
2 
3 import cats.data.Chain
4 
5 import scala.concurrent.Future
6 import scala.concurrent.ExecutionContext.Implicits.global
7 
8 object Traverses {
9   implicit class RichTraverse[A](as: List[A]) {
10     def sequentialTraverse[B](f: A => Future[B]): Future[List[B]] = {
11       as.foldLeft(Future.successful(Chain.empty[B])) { (accM, a) =>
12           for {
13             acc <- accM
14             b   <- f(a)
15           } yield acc :+ b
16         }
17         .map(_.toList)
18     }
19   }
20 
21 }
Line Stmt Id Pos Tree Symbol Tests Code
11 155 319 - 333 TypeApply cats.data.Chain.empty cats.data.Chain.empty[B]
11 40 301 - 334 Apply scala.concurrent.Future.successful scala.concurrent.Future.successful[cats.data.Chain[B]](cats.data.Chain.empty[B])
13 142 361 - 441 ApplyToImplicitArgs scala.concurrent.Future.flatMap accM.flatMap[cats.data.Chain[B]](((acc: cats.data.Chain[B]) => f.apply(a).map[cats.data.Chain[B]](((b: B) => acc.:+[B](b)))(scala.concurrent.ExecutionContext.Implicits.global)))(scala.concurrent.ExecutionContext.Implicits.global)
13 258 383 - 383 Select scala.concurrent.ExecutionContext.Implicits.global scala.concurrent.ExecutionContext.Implicits.global
14 310 403 - 441 ApplyToImplicitArgs scala.concurrent.Future.map f.apply(a).map[cats.data.Chain[B]](((b: B) => acc.:+[B](b)))(scala.concurrent.ExecutionContext.Implicits.global)
14 105 407 - 407 Select scala.concurrent.ExecutionContext.Implicits.global scala.concurrent.ExecutionContext.Implicits.global
15 236 433 - 441 Apply cats.data.Chain.:+ acc.:+[B](b)
17 211 464 - 464 Select scala.concurrent.ExecutionContext.Implicits.global scala.concurrent.ExecutionContext.Implicits.global
17 14 465 - 473 Select cats.data.Chain.toList x$1.toList
17 156 289 - 474 ApplyToImplicitArgs scala.concurrent.Future.map RichTraverse.this.as.foldLeft[scala.concurrent.Future[cats.data.Chain[B]]](scala.concurrent.Future.successful[cats.data.Chain[B]](cats.data.Chain.empty[B]))(((accM: scala.concurrent.Future[cats.data.Chain[B]], a: A) => accM.flatMap[cats.data.Chain[B]](((acc: cats.data.Chain[B]) => f.apply(a).map[cats.data.Chain[B]](((b: B) => acc.:+[B](b)))(scala.concurrent.ExecutionContext.Implicits.global)))(scala.concurrent.ExecutionContext.Implicits.global))).map[List[B]](((x$1: cats.data.Chain[B]) => x$1.toList))(scala.concurrent.ExecutionContext.Implicits.global)