Guest User

Untitled

a guest
Nov 18th, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.20 KB | None | 0 0
  1. import cats.data.ReaderT
  2. import cats.Monad
  3. import cats.mtl.ApplicativeLocal
  4. import cats.syntax.flatMap._
  5. import cats.syntax.functor._
  6. import cats.mtl.instances.local._
  7. import com.rms.miu.slickcats.DBIOInstances._
  8. import io.instastar.postgres.DatabaseEngine
  9. import scala.concurrent.duration._
  10.  
  11. import scala.concurrent.ExecutionContext.Implicits.global
  12. import slick.dbio.DBIO
  13.  
  14. import scala.concurrent.Await
  15.  
  16. object Main2 extends App {
  17. type FT[A] = ReaderT[DBIO, Context, A]
  18.  
  19. case class Context(id: String)
  20.  
  21. def fx[F[_]: Monad: ApplicativeLocal[?[_], Context]]: F[Unit] = {
  22. for {
  23. context <- ApplicativeLocal[F, Context].ask
  24. _ = println(context)
  25.  
  26. _ <- ApplicativeLocal[F, Context]
  27. .local(ctx => ctx.copy(id = ctx.id + "_updated")) {
  28. for {
  29. updatedContext <- ApplicativeLocal[F, Context].ask
  30. _ = println(updatedContext)
  31. } yield ()
  32. }
  33. } yield ()
  34. }
  35.  
  36. def fxx(implicit applicativeLocal: ApplicativeLocal[FT, Context]) = {
  37. applicativeLocal.ask.map(_.id)
  38. }
  39.  
  40. val dbEngine = DatabaseEngine()
  41. Await.result(dbEngine.db.run(fx[FT].run(Context("some_id"))), 10.seconds)
  42. Await.result(dbEngine.db.run(fxx.run(Context("some_id"))), 10.seconds)
  43. }
Add Comment
Please, Sign In to add comment