- This is based on ZIO 2.0.X (in particular 2.0.10).
- For simplicity, ZIO environment has been omitted but all the functions also work with the form
ZIO[R, E, A]. - Function arguments are usually by name, but that has (mostly) been ignored for simplicity. Also, functions are often "more generic" in their parameter types than shown below.
- For many functions there are several (unmentioned) related functions that are conceptually similar but differ in some detail. They are usually easy to learn due to consistent naming.
- Important ZIO types other than the functional effect type
ZIO[R, E, A]have been left out. For example:ZStream[R, E, A],ZLayer[RIn, E, ROut],Fiber[E, A]andRef[A]. - In the remainder of this cheat sheet,
E1 >: E, butE2can be any error type. AlsoA1 >: A.
| Alias | Full Form |
|---|---|
UIO[A] |
ZIO[Any, Nothing, A] |
IO[E, A] |
ZIO[Any, E, A] |
Task[A] |
ZIO[Any, Throwable, A] |
RIO[R, A] |
ZIO[R, Throwable, A] |
URIO[R, A] |
ZIO[R, Nothing, A] |
| Name | Given | To |
|---|---|---|
| ZIO.succeed | => A |
IO[Nothing, A] |
| ZIO.fail | => E |
IO[E, Nothing] |
| ZIO.interrupt | IO[Nothing, Nothing] |
|
| ZIO.die | Throwable |
IO[Nothing, Nothing] |
| ZIO.attempt | => A |
IO[Throwable, A] |
| ZIO.async | ((IO[E, A] => Unit) => Unit) FiberId |
IO[E, A] |
| ZIO.fromEither | Either[E, A] |
IO[E, A] |
| ZIO.left | A |
IO[Nothing, Either[A, Nothing]] |
| ZIO.right | B |
IO[Nothing, Either[Nothing, B]] |
| ZIO.fromFiber | Fiber[E, A] |
IO[E, A] |
| ZIO.fromFuture | ExecutionContext => Future[A] |
IO[Throwable, A] |
| ZIO.fromOption | Option[A] |
IO[Option[Nothing], A] |
| ZIO.none | IO[Nothing, Option[Nothing]] |
|
| ZIO.some | A |
IO[Nothing, Option[A]] |
| ZIO.fromTry | Try[A] |
IO[Throwable, A] |
| ZIO.acquireReleaseWith | IO[E, A] (acquire) A => IO[Nothing, Any] (release) A => IO[E, B] (use) |
IO[E, B] |
| ZIO.when | Boolean IO[E, A] |
IO[E, Option[A]] |
| ZIO.whenZIO | IO[E, Boolean] IO[E, A] |
IO[E, Option[A]] |
| ZIO.whenCase | A PartialFunction[A, IO[E, B]] |
IO[E, Option[B]] |
| ZIO.whenCaseZIO | IO[E, A] PartialFunction[A, IO[E, B]] |
IO[E, Option[B]] |
| ZIO.filter | Iterable[A] A => IO[E, Boolean] |
IO[E, List[A]] |
| ZIO.cond | Boolean A E |
IO[E, A] |
| Name | From | Given | To |
|---|---|---|---|
| map | IO[E, A] |
A => B |
IO[E, B] |
| mapAttempt | IO[Throwable, A] |
A => B |
IO[Throwable, B] |
| as | IO[E, A] |
B |
IO[E, B] |
| asSome | IO[E, A] |
IO[E, Option[A]] |
|
| asSomeError | IO[E, A] |
IO[Option[E], A] |
|
| orElseFail | IO[E, A] |
E2 |
IO[E2, A] |
| unit | IO[E, A] |
IO[E, Unit] |
|
| flatMap | IO[E, A] |
A => IO[E1, B] |
IO[E1, B] |
| flatten | IO[E, IO[E1, A]] |
IO[E1, A] |
|
| mapBoth | IO[E, A] |
E => E2 A => B |
IO[E2, B] |
| mapError | IO[E, A] |
E => E2 |
IO[E2, A] |
| mapErrorCause | IO[E, A] |
Cause[E] => Cause[E2] |
IO[E2, A] |
| flatMapError | IO[E, A] |
E => IO[Nothing, E2] |
IO[E2, A] |
| collect | IO[E, A] |
E1 PartialFunction[A, B] |
IO[E1, B] |
| sandbox | IO[E, A] |
IO[Cause[E], A] |
|
| flip | IO[E, A] |
IO[A, E] |
|
| tap | IO[E, A] |
A => IO[E1, _] |
IO[E1, A] |
| tapBoth | IO[E, A] |
E => IO[E1, _] A => IO[E1, _] |
IO[E1, A] |
| tapError | IO[E, A] |
E => IO[E1, _] |
IO[E1, A] |
| absolve | IO[E, Either[E, A]] |
IO[E, A] |
|
| some | IO[E, Option[A]] |
IO[Option[E], A] |
|
| head | IO[E, List[A]] |
IO[Option[E], A] |
|
| toFuture | IO[Throwable, A] |
IO[Nothing, Future[A]] |
|
| filterOrDie | IO[E, A] |
A => Boolean Throwable |
IO[E, A] |
| filterOrDieMessage | IO[E, A] |
A => Boolean String |
IO[E, A] |
| filterOrElse | IO[E, A] |
A => Boolean A => IO[E, A] |
IO[E, A] |
| filterOrFail | IO[E, A] |
A => Boolean E |
IO[E, A] |
| when | IO[E, A] |
Boolean |
IO[E, Option[A]] |
| unless | IO[E, A] |
Boolean |
IO[E, Option[A]] |
| Name | From | Given | To |
|---|---|---|---|
| ZIO.service | given Tag[A] |
ZIO[A, Nothing, A] |
|
| provideEnvironment | ZIO[R, E, A] |
ZEnvironment[R] |
IO[E, A] |
| provideLayer | ZIO[R, E, A] |
ZLayer[R0, E, R] |
ZIO[R0, E, A] |
| Name | From | Given | To |
|---|---|---|---|
| ZIO.config | Config[A] |
IO[Config.Error, A] |
| Name | From | Given | To |
|---|---|---|---|
| either | IO[E, A] |
IO[Nothing, Either[E, A]] |
|
| option | IO[E, A] |
IO[Nothing, Option[A]] |
|
| ignore | IO[E, A] |
IO[Nothing, Unit] |
|
| exit | IO[E, A] |
IO[Nothing, Exit[E, A]] |
|
<> (orElse) |
IO[E, A] |
IO[E2, A1] |
IO[E2, A1] |
| orElseEither | IO[E, A] |
IO[E2, B] |
IO[E2, Either[A, B]] |
| fold | IO[E, A] |
E => B A => B |
IO[Nothing, B] |
| foldZIO | IO[E, A] |
E => IO[E2, B] A => IO[E2, B] |
IO[E2, B] |
| foldCauseZIO | IO[E, A] |
Cause[E] => IO[E2, B] A => IO[E2, B] |
IO[E2, B] |
| catchAll | IO[E, A] |
E => IO[E2, A1] |
IO[E2, A1] |
| catchAllCause | IO[E, A] |
Cause[E] => IO[E2, A1] |
IO[E2, A1] |
| catchSome | IO[E, A] |
PartialFunction[E, IO[E1, A1]] |
IO[E1, A1] |
| retry | IO[E, A] |
Schedule[E, S] |
IO[E, A] |
| eventually | IO[E, A] |
IO[Nothing, A] |
| Name | From | Given | To |
|---|---|---|---|
| orDie | IO[Throwable, A] |
IO[Nothing, A] |
|
| orDieWith | IO[E, A] |
E => Throwable |
IO[Nothing, A] |
| refineOrDie | IO[Throwable, A] |
PartialFunction[Throwable, E2] |
IO[E2, A] |
| refineOrDieWith | IO[E, A] |
PartialFunction[E, E2] E => Throwable |
IO[E2, A] |
| Name | From | Given | To |
|---|---|---|---|
| ZIO.foldLeft | Iterable[A] S (S, A) => IO[E, S] |
IO[E, S] |
|
| ZIO.foreach | Iterable[A] A => IO[E, B] |
IO[E, List[B]] |
|
| ZIO.foreachPar | Iterable[A] A => IO[E, B] |
IO[E, List[B]] |
|
| ZIO.collectAll | Iterable[IO[E, A]] |
IO[E, List[A]] |
|
| ZIO.collectAllPar | Iterable[IO[E, A]] |
IO[E, List[A]] |
|
| ZIO.forkAll | Iterable[IO[E, A]] |
IO[Nothing, Fiber[E, List[A]]] |
|
| fork | IO[E, A] |
IO[Nothing, Runtime[E, A]] |
|
<*> (zip) |
IO[E, A] |
IO[E1, B] |
IO[E1, (A, B)] |
*> (zipRight) |
IO[E, A] |
IO[E1, B] |
IO[E1, B] |
<* (zipLeft) |
IO[E, A] |
IO[E1, B] |
IO[E1, A] |
<&> (zipPar) |
IO[E, A] |
IO[E1, B] |
IO[E1, (A, B)] |
&> (zipParRight) |
IO[E, A] |
IO[E1, B] |
IO[E1, B] |
<& (zipParLeft) |
IO[E, A] |
IO[E1, B] |
IO[E1, A] |
| race | IO[E, A] |
IO[E1, A1] |
IO[E1, A1] |
| raceAll | IO[E, A] |
Iterable[IO[E1, A1]] |
IO[E1, A1] |
| raceEither | IO[E, A] |
IO[E1, B] |
IO[E1, Either[A, B]] |
| Name | From | Given | To |
|---|---|---|---|
| ensuring | IO[E, A] |
UIO[_] |
IO[E, A] |
| onError | IO[E, A] |
Cause[E] => UIO[_] |
IO[E, A] |
| onInterrupt | IO[E, A] |
UIO[_] |
IO[E, A] |
| onTermination | IO[E, A] |
Cause[Nothing] => UIO[_] |
IO[E, A] |
| Name | From | Given | To |
|---|---|---|---|
| ZIO.never | IO[Nothing, Nothing] |
||
| ZIO.sleep | Duration |
IO[Nothing, Unit] |
|
| delay | IO[E, A] |
Duration |
IO[E, A] |
| timeout | IO[E, A] |
Duration |
IO[E, Option[A]] |
| timed | IO[E, A] |
IO[E, (Duration, A)] |
|
| forever | IO[E, A] |
IO[E, Nothing] |
|
| repeat | IO[E, A] |
Schedule[A, B] |
IO[E, B] |
| repeatUntil | IO[E, A] |
A => Boolean |
IO[E, A] |
| repeatWhile | IO[E, A] |
A => Boolean |
IO[E, A] |
| Name | From | Given | To |
|---|---|---|---|
| ZIO.log | String |
IO[Nothing, Unit] |
|
| ZIO.logFatal | String |
IO[Nothing, Unit] |
|
| ZIO.logError | String |
IO[Nothing, Unit] |
|
| ZIO.logWarning | String |
IO[Nothing, Unit] |
|
| ZIO.logInfo | String |
IO[Nothing, Unit] |
|
| ZIO.logDebug | String |
IO[Nothing, Unit] |
|
| ZIO.logTrace | String |
IO[Nothing, Unit] |