trait Syntax3 extends ImplicitPuns
All implicit syntax in BIO is available automatically without wildcard imports with the help of so-called "implicit punning", as in the following example:
import izumi.functional.bio.Monad2 def loop[F[+_, +_]: Monad2]: F[Nothing, Nothing] = { val unitEffect: F[Nothing, Unit] = Monad2[F].unit unitEffect.flatMap(loop) }
Note that a .flatMap
method is available on the unitEffect
value of an abstract type parameter F
,
even though we did not import any syntax implicits using a wildcard import.
The flatMap
method was added by the implicit punning on the Monad2
name.
In short, implicit punning just means that instead of creating a companion object for a type with the same name as the type,
we create "companion" implicit conversions with the same name. So that whenever you import the type,
you are also always importing the syntax-providing implicit conversions.
This happens to be a great fit for Tagless Final Style, since nearly all TF code will import the names of the used typeclasses.
Implicit Punning for typeclass syntax relieves the programmer from having to manually import syntax implicits in every file in their codebase.
- Note
The order of conversions is such to allow otherwise conflicting type classes to not conflict, e.g. code using constraints such as
def x[F[+_, +_]: Functor2: Applicative2: Monad2]
will compile and run normally when using syntax, despite ambiguity of implicits caused by all 3 implicits inheriting from Functor2. This is because, due to the priority order being from most-specific to least-specific, theMonad2
syntax will be used in such a case, where theMonad2[F]
implicit is actually unambiguous.
- Alphabetic
- By Inheritance
- Syntax3
- ImplicitPuns
- ImplicitPuns1
- ImplicitPuns2
- ImplicitPuns3
- ImplicitPuns4
- ImplicitPuns5
- ImplicitPuns6
- ImplicitPuns7
- ImplicitPuns8
- ImplicitPuns9
- ImplicitPuns10
- ImplicitPuns11
- ImplicitPuns12
- ImplicitPuns13
- ImplicitPuns14
- ImplicitPuns15
- ImplicitPuns16
- ImplicitPuns17
- ImplicitPuns18
- ImplicitPuns19
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def Applicative3[FR[-_, +_, +_]](implicit arg0: Applicative3[FR]): Applicative3[FR]
- Definition Classes
- ImplicitPuns17
- Annotations
- @inline()
- implicit final def Applicative3[FR[-_, +_, +_], R, E, A](self: FR[R, E, A])(implicit arg0: Applicative3[FR]): ApplicativeOps[FR, R, E, A]
- Definition Classes
- ImplicitPuns17
- Annotations
- @inline()
- final def ApplicativeError3[FR[-_, +_, +_]](implicit arg0: ApplicativeError3[FR]): ApplicativeError3[FR]
- Definition Classes
- ImplicitPuns8
- Annotations
- @inline()
- implicit final def ApplicativeError3[FR[-_, +_, +_], R, E, A](self: FR[R, E, A])(implicit arg0: ApplicativeError3[FR]): ApplicativeErrorOps[FR, R, E, A]
- Definition Classes
- ImplicitPuns8
- Annotations
- @inline()
- final def Arrow3[FR[-_, +_, +_]](implicit arg0: Arrow3[FR]): Arrow3[FR]
- Definition Classes
- ImplicitPuns14
- Annotations
- @inline()
- implicit final def Arrow3[FR[-_, +_, +_], R, E, A](self: FR[R, E, A])(implicit arg0: Functor3[FR]): FunctorOps[FR, R, E, A]
- Definition Classes
- ImplicitPuns14
- Annotations
- @inline()
- implicit final def Arrow3[FR[-_, +_, +_], R, E, A](self: FR[R, E, A])(implicit arg0: Arrow3[FR]): ArrowOps[FR, R, E, A]
- Definition Classes
- ImplicitPuns14
- Annotations
- @inline()
- final def ArrowChoice3[FR[-_, +_, +_]](implicit arg0: ArrowChoice3[FR]): ArrowChoice3[FR]
- Definition Classes
- ImplicitPuns13
- Annotations
- @inline()
- implicit final def ArrowChoice3[FR[-_, +_, +_], R, E, A](self: FR[R, E, A])(implicit arg0: Functor3[FR]): FunctorOps[FR, R, E, A]
- Definition Classes
- ImplicitPuns13
- Annotations
- @inline()
- implicit final def ArrowChoice3[FR[-_, +_, +_], R, E, A](self: FR[R, E, A])(implicit arg0: ArrowChoice3[FR]): ArrowChoiceOps[FR, R, E, A]
- Definition Classes
- ImplicitPuns13
- Annotations
- @inline()
- final def Ask3[FR[-_, +_, +_]](implicit arg0: Ask3[FR]): Ask3[FR]
- Definition Classes
- ImplicitPuns12
- Annotations
- @inline()
- implicit final def Ask3[FR[-_, +_, +_], R, E, A](self: FR[R, E, A])(implicit arg0: Applicative3[FR]): ApplicativeOps[FR, R, E, A]
- Definition Classes
- ImplicitPuns12
- Annotations
- @inline()
- final def Async3[FR[-_, +_, +_]](implicit arg0: Async3[FR]): Async3[FR]
- Definition Classes
- ImplicitPuns1
- Annotations
- @inline()
- implicit final def Async3[FR[-_, +_, +_], R, E, A](self: FR[R, E, A])(implicit arg0: Async3[FR]): AsyncOps[FR, R, E, A]
- Definition Classes
- ImplicitPuns1
- Annotations
- @inline()
- final def Bifunctor3[FR[-_, +_, +_]](implicit arg0: Bifunctor3[FR]): Bifunctor3[FR]
- Definition Classes
- ImplicitPuns18
- Annotations
- @inline()
- implicit final def Bifunctor3[FR[-_, +_, +_], R, E, A](self: FR[R, E, A])(implicit arg0: Functor3[FR]): FunctorOps[FR, R, E, A]
- Definition Classes
- ImplicitPuns18
- Annotations
- @inline()
- implicit final def Bifunctor3[FR[-_, +_, +_], R, E, A](self: FR[R, E, A])(implicit arg0: Bifunctor3[FR]): BifunctorOps[FR, R, E, A]
- Definition Classes
- ImplicitPuns18
- Annotations
- @inline()
- final def Bracket3[FR[-_, +_, +_]](implicit arg0: Bracket3[FR]): Bracket3[FR]
- Definition Classes
- ImplicitPuns6
- Annotations
- @inline()
- implicit final def Bracket3[FR[-_, +_, +_], R, E, A](self: FR[R, E, A])(implicit arg0: Bracket3[FR]): BracketOps[FR, R, E, A]
- Definition Classes
- ImplicitPuns6
- Annotations
- @inline()
- final def Concurrent3[FR[-_, +_, +_]](implicit arg0: Concurrent3[FR]): Concurrent3[FR]
- Definition Classes
- ImplicitPuns2
- Annotations
- @inline()
- implicit final def Concurrent3[FR[-_, +_, +_], R, E, A](self: FR[R, E, A])(implicit arg0: Panic3[FR]): PanicOps[FR, R, E, A]
- Definition Classes
- ImplicitPuns2
- Annotations
- @inline()
- implicit final def Concurrent3[FR[-_, +_, +_], R, E, A](self: FR[R, E, A])(implicit arg0: Concurrent3[FR]): ConcurrentOps[FR, R, E, A]
- Definition Classes
- ImplicitPuns2
- Annotations
- @inline()
- final def Error3[FR[-_, +_, +_]](implicit arg0: Error3[FR]): Error3[FR]
- Definition Classes
- ImplicitPuns7
- Annotations
- @inline()
- implicit final def Error3[FR[-_, +_, +_], R, E, A](self: FR[R, E, A])(implicit arg0: Error3[FR]): ErrorOps[FR, R, E, A]
- Definition Classes
- ImplicitPuns7
- Annotations
- @inline()
- def F[FR[-_, +_, +_]](implicit FR: Functor3[FR]): FR.type
A convenient dependent summoner for BIO hierarchy.
A convenient dependent summoner for BIO hierarchy. Auto-narrows to the most powerful available class:
import izumi.functional.bio.{F, Temporal2} def y[F[+_, +_]: Temporal2] = { F.timeout(5.seconds)(F.forever(F.unit)) }
- final def Fork3[FR[-_, +_, +_]](implicit arg0: Fork3[FR]): Fork3[FR]
- Definition Classes
- ImplicitPuns
- Annotations
- @inline()
- implicit final def Fork3[FR[-_, +_, +_], R, E, A](self: FR[R, E, A])(implicit arg0: Fork3[FR]): ForkOps[FR, R, E, A]
- Definition Classes
- ImplicitPuns
- Annotations
- @inline()
- final def Functor3[FR[-_, +_, +_]](implicit arg0: Functor3[FR]): Functor3[FR]
- Definition Classes
- ImplicitPuns19
- Annotations
- @inline()
- implicit final def Functor3[FR[-_, +_, +_], R, E, A](self: FR[R, E, A])(implicit arg0: Functor3[FR]): FunctorOps[FR, R, E, A]
- Definition Classes
- ImplicitPuns19
- Annotations
- @inline()
- final def Guarantee3[FR[-_, +_, +_]](implicit arg0: Guarantee3[FR]): Guarantee3[FR]
- Definition Classes
- ImplicitPuns9
- Annotations
- @inline()
- implicit final def Guarantee3[FR[-_, +_, +_], R, E, A](self: FR[R, E, A])(implicit arg0: Guarantee3[FR]): GuaranteeOps[FR, R, E, A]
- Definition Classes
- ImplicitPuns9
- Annotations
- @inline()
- final def IO3[FR[-_, +_, +_]](implicit arg0: IO3[FR]): IO3[FR]
- Definition Classes
- ImplicitPuns4
- Annotations
- @inline()
- final def IO3[FR[-_, +_, +_], A](effect: => A)(implicit F: IO3[FR]): FR[Any, Throwable, A]
Shorthand for IO3#syncThrowable
Shorthand for IO3#syncThrowable
IO3(println("Hello world!"))
- Definition Classes
- ImplicitPuns4
- Annotations
- @inline()
- implicit final def IO3[FR[-_, +_, +_], R, E, A](self: FR[R, E, A])(implicit arg0: IO3[FR]): IOOps[FR, R, E, A]
- Definition Classes
- ImplicitPuns4
- Annotations
- @inline()
- final def Local3[FR[-_, +_, +_]](implicit arg0: Local3[FR]): Local3[FR]
- Definition Classes
- ImplicitPuns10
- Annotations
- @inline()
- implicit final def Local3[FR[-_, +_, +_], R, E, A](self: FR[R, E, A])(implicit arg0: Local3[FR], d: DummyImplicit): LocalOpsKleisliSyntax[FR, R, E, A]
- Definition Classes
- ImplicitPuns10
- Annotations
- @inline()
- implicit final def Local3[FR[-_, +_, +_], R, E, A](self: FR[R, E, A])(implicit arg0: Monad3[FR]): MonadOps[FR, R, E, A]
- Definition Classes
- ImplicitPuns10
- Annotations
- @inline()
- implicit final def Local3[FR[-_, +_, +_], R, E, A](self: FR[R, E, A])(implicit arg0: Local3[FR]): LocalOps[FR, R, E, A]
- Definition Classes
- ImplicitPuns10
- Annotations
- @inline()
- final def Monad3[FR[-_, +_, +_]](implicit arg0: Monad3[FR]): Monad3[FR]
- Definition Classes
- ImplicitPuns16
- Annotations
- @inline()
- implicit final def Monad3[FR[-_, +_, +_], R, E, A](self: FR[R, E, A])(implicit arg0: Monad3[FR]): MonadOps[FR, R, E, A]
- Definition Classes
- ImplicitPuns16
- Annotations
- @inline()
- final def MonadAsk3[FR[-_, +_, +_]](implicit arg0: MonadAsk3[FR]): MonadAsk3[FR]
- Definition Classes
- ImplicitPuns11
- Annotations
- @inline()
- implicit final def MonadAsk3[FR[-_, +_, +_], R, E, A](self: FR[R, E, A])(implicit arg0: Monad3[FR]): MonadOps[FR, R, E, A]
- Definition Classes
- ImplicitPuns11
- Annotations
- @inline()
- final def Panic3[FR[-_, +_, +_]](implicit arg0: Panic3[FR]): Panic3[FR]
- Definition Classes
- ImplicitPuns5
- Annotations
- @inline()
- implicit final def Panic3[FR[-_, +_, +_], R, E, A](self: FR[R, E, A])(implicit arg0: Panic3[FR]): PanicOps[FR, R, E, A]
- Definition Classes
- ImplicitPuns5
- Annotations
- @inline()
- final def Parallel3[FR[-_, +_, +_]](implicit arg0: Parallel3[FR]): Parallel3[FR]
- Definition Classes
- ImplicitPuns3
- Annotations
- @inline()
- implicit final def Parallel3[F[-_, +_, +_], R, E, A](self: F[R, E, A])(implicit arg0: Monad3[F]): MonadOps[F, R, E, A]
- Definition Classes
- ImplicitPuns3
- Annotations
- @inline()
- implicit final def Parallel3[FR[-_, +_, +_], R, E, A](self: FR[R, E, A])(implicit arg0: Parallel3[FR]): ParallelOps[FR, R, E, A]
- Definition Classes
- ImplicitPuns3
- Annotations
- @inline()
- final def Profunctor3[FR[-_, +_, +_]](implicit arg0: Profunctor3[FR]): Profunctor3[FR]
- Definition Classes
- ImplicitPuns15
- Annotations
- @inline()
- implicit final def Profunctor3[FR[-_, +_, +_], R, E, A](self: FR[R, E, A])(implicit arg0: Functor3[FR]): FunctorOps[FR, R, E, A]
- Definition Classes
- ImplicitPuns15
- Annotations
- @inline()
- implicit final def Profunctor3[FR[-_, +_, +_], R, E, A](self: FR[R, E, A])(implicit arg0: Profunctor3[FR]): ProfunctorOps[FR, R, E, A]
- Definition Classes
- ImplicitPuns15
- Annotations
- @inline()
- final def Temporal3[FR[-_, +_, +_]](implicit arg0: Temporal3[FR]): Temporal3[FR]
- Definition Classes
- ImplicitPuns
- Annotations
- @inline()
- implicit final def Temporal3[FR[-_, +_, +_], R, E, A](self: FR[R, E, A])(implicit arg0: Error3[FR]): ErrorOps[FR, R, E, A]
- Definition Classes
- ImplicitPuns
- Annotations
- @inline()
- implicit final def Temporal3[FR[-_, +_, +_], R, E, A](self: FR[R, E, A])(implicit arg0: Temporal3[FR]): TemporalOps[FR, R, E, A]
- Definition Classes
- ImplicitPuns
- Annotations
- @inline()
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native()
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def equals(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef → Any
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable])
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def toString(): String
- Definition Classes
- AnyRef → Any
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()