Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import cats.data.ReaderT
- import cats.Monad
- import cats.mtl.ApplicativeLocal
- import cats.syntax.flatMap._
- import cats.syntax.functor._
- import cats.mtl.instances.local._
- import com.rms.miu.slickcats.DBIOInstances._
- import io.instastar.postgres.DatabaseEngine
- import scala.concurrent.duration._
- import scala.concurrent.ExecutionContext.Implicits.global
- import slick.dbio.DBIO
- import scala.concurrent.Await
- object Main2 extends App {
- type FT[A] = ReaderT[DBIO, Context, A]
- case class Context(id: String)
- def fx[F[_]: Monad: ApplicativeLocal[?[_], Context]]: F[Unit] = {
- for {
- context <- ApplicativeLocal[F, Context].ask
- _ = println(context)
- _ <- ApplicativeLocal[F, Context]
- .local(ctx => ctx.copy(id = ctx.id + "_updated")) {
- for {
- updatedContext <- ApplicativeLocal[F, Context].ask
- _ = println(updatedContext)
- } yield ()
- }
- } yield ()
- }
- def fxx(implicit applicativeLocal: ApplicativeLocal[FT, Context]) = {
- applicativeLocal.ask.map(_.id)
- }
- val dbEngine = DatabaseEngine()
- Await.result(dbEngine.db.run(fx[FT].run(Context("some_id"))), 10.seconds)
- Await.result(dbEngine.db.run(fxx.run(Context("some_id"))), 10.seconds)
- }
Add Comment
Please, Sign In to add comment