Skip to main content
Version: ZIO 1.x

Introduction

ZIO contains a few data types that can help you solve complex problems in asynchronous and concurrent programming. ZIO data types categorize into these sections:

  1. Core Data Types
  2. Fiber Primitives
  3. Concurrency Primitives
  4. STM
  5. Resource Safety
  6. Streaming
  7. Miscellaneous

Core Data Types#

  • ZIO โ€” A ZIO is a value that models an effectful program, which might fail or succeed.
    • UIO โ€” An UIO[A] is a type alias for ZIO[Any, Nothing, A].
    • URIO โ€” An URIO[R, A] is a type alias for ZIO[R, Nothing, A].
    • Task โ€” A Task[A] is a type alias for ZIO[Any, Throwable, A].
    • RIO โ€” A RIO[R, A] is a type alias for ZIO[R, Throwable, A].
    • IO โ€” An IO[E, A] is a type alias for ZIO[Any, E, A].
  • Exit โ€” An Exit[E, A] describes the result of executing an IO value.
  • Cause - Cause[E] is a description of a full story of a fiber failure.
  • Runtime โ€” A Runtime[R] is capable of executing tasks within an environment R.

Fiber Primitives#

  • Fiber โ€” A fiber value models an IO value that has started running, and is the moral equivalent of a green thread.
  • FiberRef โ€” FiberRef[A] models a mutable reference to a value of type A. As opposed to Ref[A], a value is bound to an executing Fiber only. You can think of it as Java's ThreadLocal on steroids.
  • Fiber.Status โ€” Fiber.Status describe the current status of a Fiber.
  • Fiber.Id โ€” Fiber.Id describe the unique identity of a Fiber.

Concurrency Primitives#

  • Hub - A Hub is an asynchronous message hub that allows publishers to efficiently broadcast values to many subscribers.
  • Promise โ€” A Promise is a model of a variable that may be set a single time, and awaited on by many fibers.
  • Semaphore โ€” A Semaphore is an asynchronous (non-blocking) semaphore that plays well with ZIO's interruption.
  • ZRef โ€” A ZRef[EA, EB, A, B] is a polymorphic, purely functional description of a mutable reference. The fundamental operations of a ZRef are set and get.
    • Ref โ€” Ref[A] models a mutable reference to a value of type A. The two basic operations are set, which fills the Ref with a new value, and get, which retrieves its current content. All operations on a Ref are atomic and thread-safe, providing a reliable foundation for synchronizing concurrent programs.
  • ZRefM โ€” A ZRefM[RA, RB, EA, EB, A, B] is a polymorphic, purely functional description of a mutable reference.
    • RefM โ€” RefM[A] models a mutable reference to a value of type A in which we can store immutable data, and update it atomically and effectfully.
  • Queue โ€” A Queue is an asynchronous queue that never blocks, which is safe for multiple concurrent producers and consumers.

STM#

  • STM - An STM represents an effect that can be performed transactionally resulting in a failure or success.

  • TArray - A TArray[A] is an array of mutable references that can participate in transactions.

  • TSet - A TSet is a mutable set that can participate in transactions.

  • TMap - A TMap[A] is a mutable map that can participate in transactions.

  • TRef - A TRef is a mutable reference to an immutable value that can participate in transactions.

  • TPriorityQueue - A TPriorityQueue[A] is a mutable priority queue that can participate in transactions.

  • TPromise - A TPromise is a mutable reference that can be set exactly once and can participate in transactions.

  • TQueue - A TQueue is a mutable queue that can participate in transactions.

  • TReentrantLock - A TReentrantLock is a reentrant read / write lock that can be composed.

  • TSemaphore - A TSemaphore is a semaphore that can participate in transactions.

    Resource Safety#

  • Managed โ€” A Managed is a value that describes a perishable resource that may be consumed only once inside a given scope.

Streaming#

The following datatypes can be found in ZIO streams library:

  • ZStream โ€” A ZStream is a lazy, concurrent, asynchronous source of values.
  • ZSink โ€” A ZSink is a consumer of values from a ZStream, which may produces a value when it has consumed enough.

Miscellaneous#

  • Chunk โ€” ZIO Chunk: Fast, Pure Alternative to Arrays
  • Schedule โ€” A Schedule is a model of a recurring schedule, which can be used for repeating successful IO values, or retrying failed IO values.

To learn more about these data types, please explore the pages above, or check out the Scaladoc documentation.