Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import cats.effect.IO
- import scala.concurrent.{Await, Future}
- import scala.concurrent.duration._
- import scala.concurrent.ExecutionContext.Implicits.global
- case class Repository()
- case class MetaData(name: String)
- trait APIClient {
- def getRepositories: IO[List[Repository]]
- def getMetadata(r: Repository): IO[MetaData]
- }
- def allMetaData(client: APIClient): IO[List[IO[MetaData]]] =
- client.getRepositories.map(
- _.map(
- repository =>
- client.getMetadata(repository)
- )
- )
- // Naive implementation for demostration purposes
- def printMetaDataOrderedByName(allMetaData: IO[List[IO[MetaData]]]): Unit =
- Await.result(
- Future.sequence(
- allMetaData.unsafeRunSync().map(_.unsafeToFuture())
- ),
- 1.minute
- ).sortWith(_.name < _.name)
- .foreach(println)
Add Comment
Please, Sign In to add comment