A Take[E, A]
represents a single take
from a queue modeling a stream of
values.
A Take[E, A]
represents a single take
from a queue modeling a stream of
values. A Take
may be a failure value E
, an element value A
, or end-of-
stream marker.
A Sink[E, A0, A, B]
consumes values of type A
, ultimately producing
either an error of type E
, or a value of type B
together with a remainder
of type A0
.
A Sink[E, A0, A, B]
consumes values of type A
, ultimately producing
either an error of type E
, or a value of type B
together with a remainder
of type A0
.
Sinks form monads and combine in the usual ways.
A Stream[E, A]
represents an effectful stream that can produce values of
type A
, or potentially fail with a value of type E
.
A Stream[E, A]
represents an effectful stream that can produce values of
type A
, or potentially fail with a value of type E
.
Streams have a very similar API to Scala collections, making them immediately familiar to most developers. Unlike Scala collections, streams can be used on effectful streams of data, such as HTTP connections, files, and so forth.
Streams do not leak resources. This guarantee holds in the presence of early termination (not all of a stream is consumed), failure, or even interruption.
Thanks to only first-order types, appropriate variance annotations, and specialized effect type (ZIO), streams feature extremely good type inference and should almost never require specification of any type parameters.