trait IO3[F[-_, +_, +_]] extends Panic3[F]
- Alphabetic
- By Inheritance
- IO3
- Panic3
- PanicSyntax
- Bracket3
- Error3
- Monad3
- ApplicativeError3
- Bifunctor3
- Guarantee3
- Applicative3
- Functor3
- RootBifunctor
- Root
- PredefinedHelper
- DivergenceHelper
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Type Members
- type Divergence = Nondivergent
- Definition Classes
- DivergenceHelper
- type IsPredefined = NotPredefined
- Definition Classes
- PredefinedHelper
- final type Just[+A] = F[Any, Nothing, A]
- final type Or[+E, +A] = F[Any, E, A]
Abstract Value Members
- abstract def bracketCase[R, E, A, B](acquire: F[R, E, A])(release: (A, Exit[E, B]) => F[R, Nothing, Unit])(use: (A) => F[R, E, B]): F[R, E, B]
- Definition Classes
- Bracket3
- abstract def bracketExcept[R, E, A, B](acquire: (RestoreInterruption3[F]) => F[R, E, A])(release: (A, Exit[E, B]) => F[R, Nothing, Unit])(use: (A) => F[R, E, B]): F[R, E, B]
Like bracketCase, but
acquire
can contain marked interruptible regions as in uninterruptibleExceptLike bracketCase, but
acquire
can contain marked interruptible regions as in uninterruptibleExcept- Definition Classes
- Panic3
- abstract def catchAll[R, E, A, E2](r: F[R, E, A])(f: (E) => F[R, E2, A]): F[R, E2, A]
- Definition Classes
- Error3
- abstract def fail[E](v: => E): F[Any, E, Nothing]
- Definition Classes
- ApplicativeError3
- abstract def flatMap[R, E, A, B](r: F[R, E, A])(f: (A) => F[R, E, B]): F[R, E, B]
- Definition Classes
- Monad3
- abstract def pure[A](a: A): F[Any, Nothing, A]
- Definition Classes
- Applicative3
- abstract def sandbox[R, E, A](r: F[R, E, A]): F[R, Failure[E], A]
- Definition Classes
- Panic3
- Note
Will return either Exit.Error or Exit.Termination in the error channel. Exit.Interruption cannot be sandboxed. Use guaranteeOnInterrupt for cleanups on interruptions.
- abstract def sendInterruptToSelf: F[Any, Nothing, Unit]
Signal interruption to this fiber.
Signal interruption to this fiber.
This is _NOT_ the same as
F.halt(Exit.Interrupted(Trace.empty))
The code above exits with
Exit.Interrupted
failure *unconditionally*, whereas sendInterruptToSelf will not exit when in an uninterruptible region. Example:F.uninterruptible { F.halt(Exit.Interrupted(Trace.empty)) *> F.sync(println("Hello!")) // interrupted above. Hello _not_ printed }
But with
sendInterruptToSelf
:F.uninterruptible { F.sendInterruptToSelf *> F.sync(println("Hello!")) // Hello IS printed. } *> F.sync(println("Impossible")) // interrupted immediately after `uninterruptible` block ends. Impossible _not_ printed
- Definition Classes
- Panic3
- See also
- https://github.com/zio/interop-cats/issues/503 - History of supporting this method in ZIO
- https://github.com/zio/zio/issues/6911 - related issue
- abstract def sync[A](effect: => A): F[Any, Nothing, A]
Capture an _exception-safe_ side-effect such as memory mutation or randomness
Capture an _exception-safe_ side-effect such as memory mutation or randomness
import izumi.functional.bio.F val referentiallyTransparentArrayAllocation: F[Nothing, Array[Byte]] = { F.sync(new Array(256)) }
- Note
If you're not completely sure that a captured block can't throw, use syncThrowable
,sync
meanssynchronous
, that is, a blocking CPU effect, as opposed to a non-blocking asynchronous effect or a long blocking I/O effect (izumi.functional.bio.BlockingIO3#syncBlocking)
Example: - abstract def syncThrowable[A](effect: => A): F[Any, Throwable, A]
Capture a side-effectful block of code that can throw exceptions
Capture a side-effectful block of code that can throw exceptions
- Note
sync
meanssynchronous
, that is, a blocking CPU effect, as opposed to a non-blocking asynchronous effect or a long blocking I/O effect (izumi.functional.bio.BlockingIO3#syncBlocking)
- abstract def terminate(v: => Throwable): F[Any, Nothing, Nothing]
- Definition Classes
- Panic3
- abstract def uninterruptibleExcept[R, E, A](r: (RestoreInterruption3[F]) => F[R, E, A]): F[R, E, A]
Designate the effect uninterruptible, with exception of regions in it that are specifically marked to restore previous interruptibility status using the provided
RestoreInterruption
functionDesignate the effect uninterruptible, with exception of regions in it that are specifically marked to restore previous interruptibility status using the provided
RestoreInterruption
function- Definition Classes
- Panic3
F.uninterruptibleExcept { restoreInterruption => val workLoop = { importantWorkThatMustNotBeInterrupted() *> log.info("Taking a break for a second, you can interrupt me while I wait!") *> restoreInterruption.apply { F.sleep(1.second) .guaranteeOnInterrupt(_ => log.info("Got interrupted!")) } *> log.info("No interruptions, going back to work!") *> workLoop } workLoop }
- Note
Interruptibility status will be restored to what it was in the outer region, so if the outer region was also uninterruptible, the provided
RestoreInterruption
will have no effect. e.g. the expressionF.uninterruptible { F.uninterruptibleExcept { restore => restore(F.sleep(1.second)) }
is fully uninterruptible throughout
Example:
Concrete Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- def *>[R, E, A, B](f: F[R, E, A], next: => F[R, E, B]): F[R, E, B]
execute two operations in order, return result of second operation
execute two operations in order, return result of second operation
- Definition Classes
- Monad3 → Applicative3
- def <*[R, E, A, B](f: F[R, E, A], next: => F[R, E, B]): F[R, E, A]
execute two operations in order, same as
*>
, but return result of first operationexecute two operations in order, same as
*>
, but return result of first operation- Definition Classes
- Monad3 → Applicative3
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- def InnerF: Functor3[F]
- Definition Classes
- ApplicativeError3 → Bifunctor3
- final def apply[A](effect: => A): F[Any, Throwable, A]
- Annotations
- @inline()
- def as[R, E, A, B](r: F[R, E, A])(v: => B): F[R, E, B]
- Definition Classes
- Functor3
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def attempt[R, E, A](r: F[R, E, A]): F[R, Nothing, Either[E, A]]
- Definition Classes
- Error3
- def bimap[R, E, A, E2, B](r: F[R, E, A])(f: (E) => E2, g: (A) => B): F[R, E2, B]
- Definition Classes
- Error3 → Bifunctor3
- def bracket[R, E, A, B](acquire: F[R, E, A])(release: (A) => F[R, Nothing, Unit])(use: (A) => F[R, E, B]): F[R, E, B]
- Definition Classes
- Bracket3
- final def bracketOnFailure[R, E, A, B](acquire: F[R, E, A])(cleanupOnFailure: (A, Failure[E]) => F[R, Nothing, Unit])(use: (A) => F[R, E, B]): F[R, E, B]
Run release action only on a failure – _any failure_, INCLUDING interruption.
Run release action only on a failure – _any failure_, INCLUDING interruption. Do not run release action if
use
finished successfully.- Definition Classes
- Bracket3
- def catchSome[R, E, A, E1 >: E](r: F[R, E, A])(f: PartialFunction[E, F[R, E1, A]]): F[R, E1, A]
- Definition Classes
- Error3
- 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])
- def flatten[R, E, A](r: F[R, E, F[R, E, A]]): F[R, E, A]
- Definition Classes
- Monad3
- def flip[R, E, A](r: F[R, E, A]): F[R, A, E]
- Definition Classes
- Error3
- final def forever[R, E, A](r: F[R, E, A]): F[R, E, Nothing]
- Definition Classes
- Applicative3
- Annotations
- @inline()
- def fromEither[E, A](effect: => Either[E, A]): F[Any, E, A]
- Definition Classes
- IO3 → ApplicativeError3
- def fromOption[E, A](errorOnNone: => E)(effect: => Option[A]): F[Any, E, A]
- Definition Classes
- IO3 → ApplicativeError3
- def fromOption[R, E, A](errorOnNone: => E, r: F[R, E, Option[A]]): F[R, E, A]
Extracts the optional value or fails with the
errorOnNone
errorExtracts the optional value or fails with the
errorOnNone
error- Definition Classes
- Error3
- def fromOptionF[R, E, A](fallbackOnNone: => F[R, E, A], r: F[R, E, Option[A]]): F[R, E, A]
Extracts the optional value, or executes the
fallbackOnNone
effectExtracts the optional value, or executes the
fallbackOnNone
effect- Definition Classes
- Monad3
- def fromOptionOr[R, E, A](valueOnNone: => A, r: F[R, E, Option[A]]): F[R, E, A]
Extracts the optional value, or returns the given
valueOnNone
valueExtracts the optional value, or returns the given
valueOnNone
value- Definition Classes
- Functor3
- def fromTry[A](effect: => Try[A]): F[Any, Throwable, A]
- Definition Classes
- IO3 → ApplicativeError3
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- def guarantee[R, E, A](f: F[R, E, A], cleanup: F[R, Nothing, Unit]): F[R, E, A]
- Definition Classes
- Bracket3 → Guarantee3
- def guaranteeCase[R, E, A](f: F[R, E, A], cleanup: (Exit[E, A]) => F[R, Nothing, Unit]): F[R, E, A]
- Definition Classes
- Bracket3
- final def guaranteeExceptOnInterrupt[R, E, A](f: F[R, E, A], cleanupOnNonInterruption: (Either[Termination, Either[Error[E], Success[A]]]) => F[R, Nothing, Unit]): F[R, E, A]
Run cleanup on both _success_ and _failure_, if the failure IS NOT an interruption.
Run cleanup on both _success_ and _failure_, if the failure IS NOT an interruption.
- Definition Classes
- Bracket3
- final def guaranteeOnFailure[R, E, A](f: F[R, E, A], cleanupOnFailure: (Failure[E]) => F[R, Nothing, Unit]): F[R, E, A]
Run cleanup only on a failure – _any failure_, INCLUDING interruption.
Run cleanup only on a failure – _any failure_, INCLUDING interruption. Do not run cleanup if
use
finished successfully.- Definition Classes
- Bracket3
- final def guaranteeOnInterrupt[R, E, A](f: F[R, E, A], cleanupOnInterruption: (Interruption) => F[R, Nothing, Unit]): F[R, E, A]
Run cleanup only on interruption.
Run cleanup only on interruption. Do not run cleanup if
use
finished successfully.- Definition Classes
- Bracket3
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- final def ifThenElse[R, E, E1, A](cond: F[R, E, Boolean])(ifTrue: => F[R, E1, A], ifFalse: => F[R, E1, A])(implicit ev: <:<[E, E1]): F[R, E1, A]
- Definition Classes
- Monad3
- Annotations
- @inline()
- final def ifThenElse[R, E, A](cond: Boolean)(ifTrue: => F[R, E, A], ifFalse: => F[R, E, A]): F[R, E, A]
- Definition Classes
- Applicative3
- Annotations
- @inline()
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- def iterateUntil[R, E, A](r: F[R, E, A])(p: (A) => Boolean): F[R, E, A]
Execute an action repeatedly until its result satisfies the given predicate and return that result, discarding all others.
Execute an action repeatedly until its result satisfies the given predicate and return that result, discarding all others.
- Definition Classes
- Monad3
- def iterateUntilF[R, E, A](init: A)(f: (A) => F[R, E, A])(p: (A) => Boolean): F[R, E, A]
Apply an effectful function iteratively until its result satisfies the given predicate and return that result.
Apply an effectful function iteratively until its result satisfies the given predicate and return that result.
- Definition Classes
- Monad3
- def iterateWhile[R, E, A](r: F[R, E, A])(p: (A) => Boolean): F[R, E, A]
Execute an action repeatedly until its result fails to satisfy the given predicate and return that result, discarding all others.
Execute an action repeatedly until its result fails to satisfy the given predicate and return that result, discarding all others.
- Definition Classes
- Monad3
- def iterateWhileF[R, E, A](init: A)(f: (A) => F[R, E, A])(p: (A) => Boolean): F[R, E, A]
Apply an effectful function iteratively until its result fails to satisfy the given predicate and return that result.
Apply an effectful function iteratively until its result fails to satisfy the given predicate and return that result.
- Definition Classes
- Monad3
- def leftFlatMap[R, E, A, E2](r: F[R, E, A])(f: (E) => F[R, Nothing, E2]): F[R, E2, A]
- Definition Classes
- Error3
- def leftMap[R, E, A, E2](r: F[R, E, A])(f: (E) => E2): F[R, E2, A]
- Definition Classes
- Bifunctor3
- def leftMap2[R, E, A, E2, E3](firstOp: F[R, E, A], secondOp: => F[R, E2, A])(f: (E, E2) => E3): F[R, E3, A]
map errors from two operations into a new error if both fail
map errors from two operations into a new error if both fail
- Definition Classes
- Error3 → ApplicativeError3
- def map[R, E, A, B](r: F[R, E, A])(f: (A) => B): F[R, E, B]
- def map2[R, E, A, B, C](r1: F[R, E, A], r2: => F[R, E, B])(f: (A, B) => C): F[R, E, C]
execute two operations in order, map their results
execute two operations in order, map their results
- Definition Classes
- Monad3 → Applicative3
- 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()
- def orElse[R, E, A, E2](r: F[R, E, A], f: => F[R, E2, A]): F[R, E2, A]
execute second operation only if the first one fails
execute second operation only if the first one fails
- Definition Classes
- Error3 → ApplicativeError3
- final def orTerminate[R, A](r: F[R, Throwable, A]): F[R, Nothing, A]
- Definition Classes
- Panic3
- Annotations
- @inline()
- def redeem[R, E, A, E2, B](r: F[R, E, A])(err: (E) => F[R, E2, B], succ: (A) => F[R, E2, B]): F[R, E2, B]
- Definition Classes
- Error3
- def redeemPure[R, E, A, B](r: F[R, E, A])(err: (E) => B, succ: (A) => B): F[R, Nothing, B]
- Definition Classes
- Error3
- def retryUntil[R, E, A](r: F[R, E, A])(f: (E) => Boolean): F[R, E, A]
Retries this effect until its error satisfies the specified predicate.
Retries this effect until its error satisfies the specified predicate.
- Definition Classes
- Error3
- def retryUntilF[R, R1 <: R, E, A](r: F[R, E, A])(f: (E) => F[R1, Nothing, Boolean]): F[R1, E, A]
Retries this effect until its error satisfies the specified effectful predicate.
Retries this effect until its error satisfies the specified effectful predicate.
- Definition Classes
- Error3
- def retryWhile[R, E, A](r: F[R, E, A])(f: (E) => Boolean): F[R, E, A]
Retries this effect while its error satisfies the specified predicate.
Retries this effect while its error satisfies the specified predicate.
- Definition Classes
- Error3
- def retryWhileF[R, R1 <: R, E, A](r: F[R, E, A])(f: (E) => F[R1, Nothing, Boolean]): F[R1, E, A]
Retries this effect while its error satisfies the specified effectful predicate.
Retries this effect while its error satisfies the specified effectful predicate.
- Definition Classes
- Error3
- final def sandboxExit[R, E, A](r: F[R, E, A]): F[R, Nothing, Exit[E, A]]
- Definition Classes
- Panic3
- Annotations
- @inline()
- Note
Will return either Exit.Error or Exit.Termination. Exit.Interruption cannot be sandboxed. Use guaranteeOnInterrupt for cleanups on interruptions.
- def sequence[R, E, A](l: Iterable[F[R, E, A]]): F[R, E, List[A]]
- Definition Classes
- Applicative3
- def sequence_[R, E](l: Iterable[F[R, E, Unit]]): F[R, E, Unit]
- Definition Classes
- Applicative3
- def suspend[R, A](effect: => F[R, Throwable, A]): F[R, Throwable, A]
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def tailRecM[R, E, A, B](a: A)(f: (A) => F[R, E, Either[A, B]]): F[R, E, B]
- Definition Classes
- Monad3
- def tap[R, E, A](r: F[R, E, A], f: (A) => F[R, E, Unit]): F[R, E, A]
- Definition Classes
- Monad3
- def tapBoth[R, E, A, E1 >: E](r: F[R, E, A])(err: (E) => F[R, E1, Unit], succ: (A) => F[R, E1, Unit]): F[R, E1, A]
- Definition Classes
- Error3
- def tapError[R, E, A, E1 >: E](r: F[R, E, A])(f: (E) => F[R, E1, Unit]): F[R, E1, A]
- Definition Classes
- Error3
- def toString(): String
- Definition Classes
- AnyRef → Any
- final def traverse[R, E, A, B](o: Option[A])(f: (A) => F[R, E, B]): F[R, E, Option[B]]
- Definition Classes
- Applicative3
- Annotations
- @inline()
- def traverse[R, E, A, B](l: Iterable[A])(f: (A) => F[R, E, B]): F[R, E, List[B]]
- Definition Classes
- Applicative3
- def traverse_[R, E, A](l: Iterable[A])(f: (A) => F[R, E, Unit]): F[R, E, Unit]
- Definition Classes
- Applicative3
- def uninterruptible[R, E, A](r: F[R, E, A]): F[R, E, A]
- Definition Classes
- Panic3
- def unit: F[Any, Nothing, Unit]
- Definition Classes
- Applicative3
- final def unless[R, E, E1](cond: F[R, E, Boolean])(ifFalse: => F[R, E1, Unit])(implicit ev: <:<[E, E1]): F[R, E1, Unit]
- Definition Classes
- Monad3
- Annotations
- @inline()
- final def unless[R, E](cond: Boolean)(ifFalse: => F[R, E, Unit]): F[R, E, Unit]
- Definition Classes
- Applicative3
- Annotations
- @inline()
- def void[R, E, A](r: F[R, E, A]): F[R, E, Unit]
- Definition Classes
- Functor3
- 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()
- final def when[R, E, E1](cond: F[R, E, Boolean])(ifTrue: => F[R, E1, Unit])(implicit ev: <:<[E, E1]): F[R, E1, Unit]
- Definition Classes
- Monad3
- Annotations
- @inline()
- final def when[R, E](cond: Boolean)(ifTrue: => F[R, E, Unit]): F[R, E, Unit]
- Definition Classes
- Applicative3
- Annotations
- @inline()
- final def widen[R, E, A, A1](r: F[R, E, A])(implicit ev: <:<[A, A1]): F[R, E, A1]
- Definition Classes
- Functor3
- Annotations
- @inline()
- final def widenBoth[R, E, A, E1, A1](r: F[R, E, A])(implicit ev: <:<[E, E1], ev2: <:<[A, A1]): F[R, E1, A1]
- Definition Classes
- Bifunctor3
- Annotations
- @inline()
- final def widenError[R, E, A, E1](r: F[R, E, A])(implicit ev: <:<[E, E1]): F[R, E1, A]
- Definition Classes
- Bifunctor3
- Annotations
- @inline()
- final def withFilter[R, E, A](r: F[R, E, A])(predicate: (A) => Boolean)(implicit filter: WithFilter[E], pos: SourceFilePositionMaterializer): F[R, E, A]
for-comprehensions sugar:
for-comprehensions sugar:
for { (1, 2) <- F.pure((2, 1)) } yield ()
Use widenError to for pattern matching with non-Throwable errors:
val f = for { (1, 2) <- F.pure((2, 1)).widenError[Option[Unit]] } yield () // f: F[Option[Unit], Unit] = F.fail(Some(())
- Definition Classes
- Error3
- Annotations
- @inline()