Skip to content

Instantly share code, notes, and snippets.

@yasuabe
Created April 7, 2019 15:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yasuabe/80cf29613393ad21e2277dedf6ddcd44 to your computer and use it in GitHub Desktop.
Save yasuabe/80cf29613393ad21e2277dedf6ddcd44 to your computer and use it in GitHub Desktop.
sample code for Cats MTL ApplicativeLocal
import cats.data.ReaderT
import cats.effect.IO
import cats.syntax.flatMap._
import cats.syntax.functor._
import cats.{Applicative, Monad}
import cats.mtl.{ApplicativeAsk, ApplicativeLocal}
type Config = Map[String, String]
def get42[F[_]: Applicative](implicit F: ApplicativeAsk[F, Config]): F[String] =
F.ask.map(_.getOrElse("42", "none"))
def both[F[_]: Monad](implicit F: ApplicativeLocal[F, Config]): F[(String, String)] =
for {
m <- F.local(_.updated("42", "modified"))(get42[F])
o <- get42[F]
} yield (m, o)
import cats.mtl.instances.local._
both[ReaderT[IO, Config, ?]].run(Map("42" -> "original")).unsafeRunSync()
// (modified,original)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment