trait WithRun[F[_], G[_], C] extends WithProvide[F, G, C] with WithLocal[F, C] with RunContext[F] with Unlift[G, F]

Synonym for both RunContext and Unlift with explicit C as Ctx and G as Lower for better type inference

Can be seen as transformation F[_] = C => G[_]

Linear Supertypes
Unlift[G, F], RunContext[F], WithLocal[F, C], WithContext[F, C], Local[F], Context[F], WithProvide[F, G, C], Lift[G, F], Provide[F], ContextBase, AnyRef, Any
Known Subclasses
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. WithRun
  2. Unlift
  3. RunContext
  4. WithLocal
  5. WithContext
  6. Local
  7. Context
  8. WithProvide
  9. Lift
  10. Provide
  11. ContextBase
  12. AnyRef
  13. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Type Members

  1. type Ctx = C
    Definition Classes
    WithRunWithContextContextWithProvideProvide
  2. type Lower[A] = G[A]

    Result effect type without any notion of context

    Result effect type without any notion of context

    Definition Classes
    WithProvideProvide

Abstract Value Members

  1. abstract def context: F[Ctx]
    Definition Classes
    Context
  2. abstract def functor: Functor[F]
    Definition Classes
    Context
  3. abstract def lift[A](fa: G[A]): F[A]
    Definition Classes
    UnliftLift
  4. abstract def local[A](fa: F[A])(project: (WithRun.Ctx) ⇒ WithRun.Ctx): F[A]

    Alters context for computation

    Alters context for computation

    fa

    computation that is going to run with different context

    project

    pure function

    returns

    result of ran computation fa

    Definition Classes
    WithLocalLocal
    Example:
    1. Example of usage is to hide sensitive information

       case class UserContext( id: String, phoneNumber: String
        //very sensitive )
      
      def hidePartOfPhoneNumber: String => String = ???
      
      def contextualLogInfo[F[_]](message: String)(implicit hasUserContext: UserContext In F): F[Unit] = ??? //logs both
      message AND UserContext
      
      def program[F[_]: Monad] = for { user <- obtainUserSomehow[F] implicit0(hasUserContext: In[User, F]) <-
      Context.const[F, User](user.toContext) logUser = contextualLogInfo[F](s"Successfully obtained user") _ <-
      logUser.local(hidePartOfPhoneNumber) //logs only part of phone number } yield ()
  5. abstract def runContext[A](fa: F[A])(ctx: WithRun.Ctx): Lower[A]

    Runs fa providing ctx to it.

    Runs fa providing ctx to it.

    One can treat F as function of type Ctx => Lower[A] so this method applies it to ctx.

    fa

    Contextual computation

    returns

    Result of running fa and providing it context

    Definition Classes
    WithProvideProvide
    Example:
    1. Example of usage is to hide sensitive information across a part of service

       import tofu.syntax.context._
      
      case class UserContext( id: String, phoneNumber: String //very sensitive ) def hidePartOfPhoneNumber: String =>
      String = ???
      
      def contextualLogInfo[F[_]](message: String)(implicit hasUserContext: UserContext In F): F[Unit] = ??? //logs both
      message AND UserContext
      
      def program[F[_]: WithRun[*[_], G[_], UserContext], G[_]: Monad] = for { user <- obtainUserSomehow[G] logUser =
      contextualLogInfo[F](s"Successfully obtained user") _ <- runContext[F](logUser)(user.toContext) //G[Unit] } yield
      ()

Concrete Value Members

  1. final def !=(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  2. final def ##(): Int
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  4. def andThen[H[_]](ugh: Unlift[F, H])(implicit arg0: Monad[H]): Unlift[G, H]
    Definition Classes
    Unlift
  5. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  6. def asWithContext: WithContext[F, C]
    Definition Classes
    WithContextContext
  7. def ask[A](f: (WithRun.Ctx) ⇒ A): F[A]

    Returns context modified by pure function f.

    Returns context modified by pure function f.

    For example one can use it like that:

    Context[F].ask(myCtx => myCtx.toString)

    Also there is more convenient syntax:

    import tofu.syntax.context._
    
    ask[F](myCtx => myCtx.toString)
    Definition Classes
    WithContextContext
    Note

    It does not affect context itself.

  8. def askF[A](f: (WithRun.Ctx) ⇒ F[A])(implicit F: FlatMap[F]): F[A]

    Same as ask but f is effectual

    Same as ask but f is effectual

    Definition Classes
    WithContextContext
  9. def clone(): AnyRef
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... ) @native() @IntrinsicCandidate()
  10. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  11. def equals(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  12. def extract[A](extract: Extract[WithRun.Ctx, A]): ContextExtractInstance[F, WithRun.Ctx, A]

    Allows to focus context on its inside with lens.

    Allows to focus context on its inside with lens.

    extract

    lens that can extract value of type A from Ctx

    Definition Classes
    WithContextContext
  13. final def getClass(): Class[_]
    Definition Classes
    AnyRef → Any
    Annotations
    @native() @IntrinsicCandidate()
  14. def hashCode(): Int
    Definition Classes
    AnyRef → Any
    Annotations
    @native() @IntrinsicCandidate()
  15. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  16. def liftF: FunctionK[G, F]
    Definition Classes
    Lift
  17. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  18. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native() @IntrinsicCandidate()
  19. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native() @IntrinsicCandidate()
  20. def runContextK(ctx: WithRun.Ctx): ~>[F, Lower]

    Same as runContext but higher-kinded.

    Same as runContext but higher-kinded.

    Definition Classes
    WithProvideProvide
    Example:
    1.  trait ProcessHandler[G[_]] { def mapK[M[_]](fk: G ~> M): ProcessHandler[M] = ??? //...other methods } type
        WithMyContext[F[_], A] = ReaderT[F, MyCtx, A] val contextualProcessHandler: ProcessHandler[IO WithMyContext _] =
        ???
      
      val processHandler: ProcessHandler[IO] = processHandler.mapK( WithProvide[IO WithMyContext _, IO,
      MyCtx].runContextK )
  21. def runEquivalent[A](eq: Equivalent[Ctx, A]): WithRun[F, G, A]

    Allows to focus Provide on inner parts of its context with equivalence lens.

    Allows to focus Provide on inner parts of its context with equivalence lens.

    eq

    lens that can convert from Ctx value of type A

    Definition Classes
    WithRunRunContext
  22. def runExtract[A](extract: Extract[A, WithRun.Ctx]): WithProvide[F, Lower, A]

    Allows to focus Provide on inner parts of its context with lens.

    Allows to focus Provide on inner parts of its context with lens.

    extract

    lens that can extract from Ctx value of type A

    Definition Classes
    WithProvideProvide
  23. def self: WithRun[F, G, C]
    Definition Classes
    WithRunRunContextWithProvideProvide
  24. def subIso(implicit G: Functor[F]): F[IsoK[G, F]]
    Definition Classes
    Unlift
  25. def subcontext[A](contains: Contains[WithRun.Ctx, A]): WithLocal[F, A]

    Allows to focus Local on inner parts of its context with lens.

    Allows to focus Local on inner parts of its context with lens.

    contains

    lens that can extract from Ctx or set some value of type A

    Definition Classes
    WithLocalLocal
  26. final def synchronized[T0](arg0: ⇒ T0): T0
    Definition Classes
    AnyRef
  27. def toString(): String
    Definition Classes
    AnyRef → Any
  28. def unlift: F[~>[F, G]]

    Allows to convert some context-unaware computation into contextual one.

    Allows to convert some context-unaware computation into contextual one.

    Definition Classes
    WithRunUnliftRunContext
    Example:
    1.  trait ProcessHandler[G[_]] { def mapK[M[_]](fk: G ~> M): ProcessHandler[M] = ??? //...other methods }
      
      type WithMyContext[F[_], A] = ReaderT[F, MyCtx, A]
      
      val processHandler: ProcessHandler[IO WithMyContext _] = ???
      
      val contextualHandler: IO WithMyContext ProcessHandler[IO] = processHandler.mapK( WithRun[WithMyContext[IO, _],
      IO, MyCtx].unlift.map(fk => processHandler.mapK(fk)) ) //now it is able to process MyCtx but is wrapped in IO
      WithMyContext *
  29. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  30. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... ) @native()
  31. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )

Deprecated Value Members

  1. def finalize(): Unit
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] ) @Deprecated
    Deprecated

Inherited from Unlift[G, F]

Inherited from RunContext[F]

Inherited from WithLocal[F, C]

Inherited from WithContext[F, C]

Inherited from Local[F]

Inherited from Context[F]

Inherited from WithProvide[F, G, C]

Inherited from Lift[G, F]

Inherited from Provide[F]

Inherited from ContextBase

Inherited from AnyRef

Inherited from Any

Ungrouped