Skip to content

Instantly share code, notes, and snippets.

@yasuabe
Created April 7, 2019 15:11
Show Gist options
  • Save yasuabe/37ad2cabd5b43ea5ff426a86369bef22 to your computer and use it in GitHub Desktop.
Save yasuabe/37ad2cabd5b43ea5ff426a86369bef22 to your computer and use it in GitHub Desktop.
sample code for Cats MTL ApplicativeAsk
import cats.FlatMap
import cats.data.Kleisli
import cats.syntax.flatMap._
import cats.syntax.functor._
import cats.effect.Sync
import cats.mtl.ApplicativeAsk
import monix.eval.Task
type Config = Map[String, String]
def askFunc[F[_]: FlatMap: Sync](key: String)(implicit F: ApplicativeAsk[F, Config]): F[String] =
for {
config <- F.ask
result = config.getOrElse(key, "none")
_ <- Sync[F].delay { println(s"$key -> $result") }
} yield result
import cats.mtl.instances.local._
import monix.execution.Scheduler.Implicits.global
import cats.syntax.traverse._
import cats.instances.list._
val program: Task[List[String]] =
List("21", "42", "63")
.traverse(askFunc[Kleisli[Task, Config, ?]])
.run(Map("42" -> "foo"))
program.runSyncUnsafe()
// 21 -> none
// 42 -> foo
// 63 -> none
// res0: List[String] = List(none, foo, none)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment