object Stream extends StreamLowPriority
- Source
- Stream.scala
- Alphabetic
- By Inheritance
- Stream
- StreamLowPriority
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Type Members
- final class CompileOps[F[_], G[_], O] extends AnyRef
Projection of a
Stream
providing various ways to compile aStream[F,O]
to aG[...]
. - implicit final class FallibleOps[O] extends AnyVal
Provides syntax for fallible streams.
- implicit final class IdOps[O] extends AnyVal
Provides syntax for pure pipes based on
cats.Id
. - implicit final class InvariantOps[F[_], O] extends AnyVal
A view of
Stream
that removes the variance from the type parameters.A view of
Stream
that removes the variance from the type parameters. This allows defining syntax in which the type parameters appear in contravariant (i.e. input) position, which would fail to compile if defined as instance methods. - implicit final class NestedStreamOps[F[_], O] extends AnyVal
Provides syntax for streams of streams.
- implicit final class NothingStreamOps[F[_]] extends AnyVal
- implicit final class OptionStreamOps[F[_], O] extends AnyVal
- final class PartiallyAppliedFromBlockingIterator[F[_]] extends AnyVal
- final class PartiallyAppliedFromIterator[F[_]] extends AnyVal
- implicit final class PipeOps[F[_], I, O] extends AnyVal
Provides operations on effectful pipes for syntactic convenience.
- implicit final class PureOps[O] extends AnyVal
Provides syntax for pure streams.
- implicit final class PurePipe2Ops[I, I2, O] extends AnyVal
Provides operations on pure pipes for syntactic convenience.
- implicit final class PurePipeOps[I, O] extends AnyVal
Provides operations on pure pipes for syntactic convenience.
- final class StepLeg[+F[_], +O] extends AnyRef
When merging multiple streams, this represents step of one leg.
When merging multiple streams, this represents step of one leg.
It is common to
uncons
, however unlikeuncons
, it keeps track of stream scope independently of the main scope of the stream.This assures, that after each next
stepLeg
each Streamleg
keeps its scope when interpreting.Usual scenarios is to first invoke
stream.pull.stepLeg
and then consume whatever is available inleg.head
. If the next step is requiredleg.stepLeg
will yield nextLeg
.Once the stream will stop to be interleaved (merged), then
stream
allows to return to normal stream invocation. - final class ToPull[F[_], O] extends AnyVal
Projection of a
Stream
providing various ways to get aPull
from theStream
.
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
- implicit def alignInstance[F[_]]: Align[[β$14$]Stream[F, β$14$]]
Align
instance forStream
.Align
instance forStream
. * @examplescala> import cats.syntax.all._ scala> Stream(1,2,3).align(Stream("A","B","C","D","E")).toList res0: List[cats.data.Ior[Int,String]] = List(Both(1,A), Both(2,B), Both(3,C), Right(D), Right(E))
- def apply[F[x] >: Pure[x], O](os: O*): Stream[F, O]
Creates a pure stream that emits the supplied values.
Creates a pure stream that emits the supplied values. To convert to an effectful stream, use
covary
. - final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def attemptEval[F[_], O](fo: F[O]): Stream[F, Either[Throwable, O]]
Creates a single element stream that gets its value by evaluating the supplied effect.
Creates a single element stream that gets its value by evaluating the supplied effect. If the effect fails, a
Left
is emitted. Otherwise, aRight
is emitted.Use eval instead if a failure while evaluating the effect should fail the stream.
scala> import cats.effect.SyncIO scala> Stream.attemptEval(SyncIO(10)).compile.toVector.unsafeRunSync() res0: Vector[Either[Throwable,Int]] = Vector(Right(10)) scala> Stream.attemptEval(SyncIO(throw new RuntimeException)).compile.toVector.unsafeRunSync() res1: Vector[Either[Throwable,Nothing]] = Vector(Left(java.lang.RuntimeException))
Example: - def awakeDelay[F[_]](period: FiniteDuration)(implicit t: Temporal[F]): Stream[F, FiniteDuration]
Light weight alternative to
awakeEvery
that sleeps for durationd
before each pulled element. - def awakeEvery[F[_]](period: FiniteDuration, dampen: Boolean)(implicit t: Temporal[F]): Stream[F, FiniteDuration]
Discrete stream that every
d
emits elapsed duration since the start time of stream consumption.Discrete stream that every
d
emits elapsed duration since the start time of stream consumption.For example:
awakeEvery[IO](5 seconds)
will return (approximately)5s, 10s, 15s
, and will lie dormant between emitted values.- period
duration between emits of the resulting stream
- dampen
whether missed periods result in 1 emitted tick or 1 per missed period, see
fixedRate
for more info
- def awakeEvery[F[_]](period: FiniteDuration)(implicit arg0: Temporal[F]): Stream[F, FiniteDuration]
Discrete stream that every
d
emits elapsed duration since the start time of stream consumption.Discrete stream that every
d
emits elapsed duration since the start time of stream consumption.Missed periods are dampened to a single tick.
For example:
awakeEvery[IO](5 seconds)
will return (approximately)5s, 10s, 15s
, and will lie dormant between emitted values.- period
duration between emits of the resulting stream
- def bracket[F[_], R](acquire: F[R])(release: (R) => F[Unit]): Stream[F, R]
Creates a stream that emits a resource allocated by an effect, ensuring the resource is eventually released regardless of how the stream is used.
Creates a stream that emits a resource allocated by an effect, ensuring the resource is eventually released regardless of how the stream is used.
A typical use case for bracket is working with files or network sockets. The resource effect opens a file and returns a reference to it. One can then flatMap on the returned Stream to access the file, e.g to read bytes and transform them in to some stream of elements (e.g., bytes, strings, lines, etc.). The
release
action then closes the file once the result Stream terminates, even in case of interruption or errors.- acquire
resource to acquire at start of stream
- release
function which returns an effect that releases the resource
- def bracketCase[F[_], R](acquire: F[R])(release: (R, ExitCase) => F[Unit]): Stream[F, R]
Like bracket but the release action is passed an
ExitCase[Throwable]
.Like bracket but the release action is passed an
ExitCase[Throwable]
.ExitCase.Canceled
is passed to the release action in the event of either stream interruption or overall compiled effect cancelation. - def bracketCaseWeak[F[_], R](acquire: F[R])(release: (R, ExitCase) => F[Unit]): Stream[F, R]
Like bracketCase but no scope is introduced, causing resource finalization to occur at the end of the current scope at the time of acquisition.
- def bracketFull[F[_], R](acquire: (Poll[F]) => F[R])(release: (R, ExitCase) => F[Unit])(implicit F: MonadCancel[F, _]): Stream[F, R]
Like bracketCase but the acquire action may be canceled.
- def bracketFullWeak[F[_], R](acquire: (Poll[F]) => F[R])(release: (R, ExitCase) => F[Unit])(implicit F: MonadCancel[F, _]): Stream[F, R]
Like bracketFull but no scope is introduced, causing resource finalization to occur at the end of the current scope at the time of acquisition.
- def bracketWeak[F[_], R](acquire: F[R])(release: (R) => F[Unit]): Stream[F, R]
Like bracket but no scope is introduced, causing resource finalization to occur at the end of the current scope at the time of acquisition.
- def chunk[F[x] >: Pure[x], O](os: Chunk[O]): Stream[F, O]
Creates a pure stream that emits the elements of the supplied chunk.
Creates a pure stream that emits the elements of the supplied chunk.
scala> Stream.chunk(Chunk(1,2,3)).toList res0: List[Int] = List(1, 2, 3)
Example: - def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @IntrinsicCandidate() @native()
- def constant[F[x] >: Pure[x], O](o: O, chunkSize: Int = 256): Stream[F, O]
Creates an infinite pure stream that always returns the supplied value.
Creates an infinite pure stream that always returns the supplied value.
Elements are emitted in finite chunks with
chunkSize
number of elements.scala> Stream.constant(0).take(5).toList res0: List[Int] = List(0, 0, 0, 0, 0)
Example: - implicit def deferInstance[F[_]]: Defer[[β$26$]Stream[F, β$26$]]
Defer
instance forStream
- def duration[F[_]](implicit F: Clock[F]): Stream[F, FiniteDuration]
A continuous stream of the elapsed time, computed using
System.nanoTime
.A continuous stream of the elapsed time, computed using
System.nanoTime
. Note that the actual granularity of these elapsed times depends on the OS, for instance the OS may only update the current time every ten milliseconds or so. - def emit[F[x] >: Pure[x], O](o: O): Stream[F, O]
Creates a singleton pure stream that emits the supplied value.
Creates a singleton pure stream that emits the supplied value.
scala> Stream.emit(0).toList res0: List[Int] = List(0)
Example: - def emits[F[x] >: Pure[x], O](os: Seq[O]): Stream[F, O]
Creates a pure stream that emits the supplied values.
Creates a pure stream that emits the supplied values.
scala> Stream.emits(List(1, 2, 3)).toList res0: List[Int] = List(1, 2, 3)
Example: - val empty: Stream[Pure, Nothing]
Empty pure stream.
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def equals(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef → Any
- def eval[F[_], O](fo: F[O]): Stream[F, O]
Creates a single element stream that gets its value by evaluating the supplied effect.
Creates a single element stream that gets its value by evaluating the supplied effect. If the effect fails, the returned stream fails.
Use attemptEval instead if a failure while evaluating the effect should be emitted as a value.
scala> import cats.effect.SyncIO scala> Stream.eval(SyncIO(10)).compile.toVector.unsafeRunSync() res0: Vector[Int] = Vector(10) scala> Stream.eval(SyncIO(throw new RuntimeException)).covaryOutput[Int].compile.toVector.attempt.unsafeRunSync() res1: Either[Throwable,Vector[Int]] = Left(java.lang.RuntimeException)
Example: - def evalSeq[F[_], S[A] <: Seq[A], O](fo: F[S[O]]): Stream[F, O]
Like
evals
, but lifts any Seq in the effect. - def evalUnChunk[F[_], O](fo: F[Chunk[O]]): Stream[F, O]
Like
eval
but resulting chunk is flatten efficiently. - def evals[F[_], S[_], O](fo: F[S[O]])(implicit arg0: Foldable[S]): Stream[F, O]
Like
eval
, but lifts a foldable structure. - def every[F[_]](d: FiniteDuration)(implicit clock: Clock[F], F: Functor[F]): Stream[F, Boolean]
A continuous stream which is true after
d, 2d, 3d...
elapsed duration, and false otherwise.A continuous stream which is true after
d, 2d, 3d...
elapsed duration, and false otherwise. If you'd like a 'discrete' stream that will actually block untild
has elapsed, useawakeEvery
instead. - def exec[F[_]](action: F[Unit]): Stream[F, Nothing]
As a result, the returned stream emits no elements and hence has output type
Nothing
.As a result, the returned stream emits no elements and hence has output type
Nothing
.scala> import cats.effect.SyncIO scala> Stream.exec(SyncIO(println("Ran"))).covaryOutput[Int].compile.toVector.unsafeRunSync() res0: Vector[Int] = Vector()
Example: - def fixedDelay[F[_]](period: FiniteDuration)(implicit t: Temporal[F]): Stream[F, Unit]
Light weight alternative to fixedRate that sleeps for duration
d
before each pulled element.Light weight alternative to fixedRate that sleeps for duration
d
before each pulled element.Behavior differs from
fixedRate
because the sleep between elements occurs after the next element is pulled whereasfixedRate
accounts for the time it takes to process the emitted unit. This difference can roughly be thought of as the difference betweenscheduleWithFixedDelay
andscheduleAtFixedRate
injava.util.concurrent.Scheduler
.Alias for
sleep(period).repeat
. - def fixedRate[F[_]](period: FiniteDuration, dampen: Boolean)(implicit F: Temporal[F]): Stream[F, Unit]
Discrete stream that emits a unit every
d
.Discrete stream that emits a unit every
d
.See fixedDelay for an alternative that sleeps
d
between elements.This operation differs in that the time between ticks should roughly be equal to the specified period, regardless of how much time it takes to process that tick downstream. For example, with a 1 second period and a task that takes 100ms, the task would run at timestamps, 1s, 2s, 3s, etc. when using
fixedRate >> task
whereas it would run at timestamps 1s, 2.1s, 3.2s, etc. when usingfixedDelay >> task
.In the case where task processing takes longer than a single period, 1 or more ticks are immediately emitted to "catch-up". The
dampen
parameter controls whether a single tick is emitted or whether one per missed period is emitted.- period
period between emits of the resulting stream
- dampen
true if a single unit should be emitted when multiple periods have passed since last execution, false if a unit for each period should be emitted
- def fixedRate[F[_]](period: FiniteDuration)(implicit t: Temporal[F]): Stream[F, Unit]
Discrete stream that emits a unit every
d
, with missed period ticks dampened.Discrete stream that emits a unit every
d
, with missed period ticks dampened.See fixedDelay for an alternative that sleeps
d
between elements.- period
duration between emits of the resulting stream
- def fixedRateStartImmediately[F[_]](period: FiniteDuration, dampen: Boolean)(implicit F: Temporal[F]): Stream[F, Unit]
Discrete stream that emits a unit every
d
.Discrete stream that emits a unit every
d
.Unlike fixedRate, it doesn't wait for
d
before emitting the first unit.- period
duration between emits of the resulting stream
- dampen
true if a single unit should be emitted when multiple periods have passed since last execution, false if a unit for each period should be emitted
- def fixedRateStartImmediately[F[_]](period: FiniteDuration)(implicit F: Temporal[F]): Stream[F, Unit]
Discrete stream that emits a unit every
d
, with missed period ticks dampened.Discrete stream that emits a unit every
d
, with missed period ticks dampened.Unlike fixedRate, it doesn't wait for
d
before emitting the first unit.- period
duration between emits of the resulting stream
- def foldable[F[x] >: Pure[x], G[_], O](os: G[O])(implicit arg0: Foldable[G]): Stream[F, O]
Like
emits
, but works for any G that has aFoldable
instance. - def force[F[_], A](f: F[Stream[F, A]]): Stream[F, A]
Lifts an effect that generates a stream in to a stream.
Lifts an effect that generates a stream in to a stream. Alias for
eval(f).flatMap(_)
.scala> import cats.effect.SyncIO scala> Stream.force(SyncIO(Stream(1,2,3).covary[SyncIO])).compile.toVector.unsafeRunSync() res0: Vector[Int] = Vector(1, 2, 3)
Example: - def fromAutoCloseable[F[_], O <: AutoCloseable](fo: F[O])(implicit arg0: Sync[F]): Stream[F, O]
Converts the supplied java.lang.AutoCloseable into a singleton stream.
- def fromAutoCloseableWeak[F[_], O <: AutoCloseable](fo: F[O])(implicit arg0: Sync[F]): Stream[F, O]
Like fromAutoCloseable but does not introduce a scope, allowing finalization to occur after subsequent appends or other scope-preserving transformations.
Like fromAutoCloseable but does not introduce a scope, allowing finalization to occur after subsequent appends or other scope-preserving transformations.
Scopes can be manually introduced via Stream#scope if desired.
- def fromBlockingIterator[F[_]]: PartiallyAppliedFromBlockingIterator[F]
Lifts an iterator into a Stream, shifting any interaction with the iterator to the blocking pool.
- def fromEither[F[_]]: PartiallyAppliedFromEither[F]
Lifts an Either[Throwable, A] to an effectful Stream.
Lifts an Either[Throwable, A] to an effectful Stream.
scala> import cats.effect.SyncIO, scala.util.Try scala> Stream.fromEither[SyncIO](Right(42)).compile.toList.unsafeRunSync() res0: List[Int] = List(42) scala> Try(Stream.fromEither[SyncIO](Left(new RuntimeException)).compile.toList.unsafeRunSync()) res1: Try[List[Nothing]] = Failure(java.lang.RuntimeException)
Example: - def fromIterator[F[_]]: PartiallyAppliedFromIterator[F]
Lifts an iterator into a Stream.
- def fromOption[F[_]]: PartiallyAppliedFromOption[F]
Lifts an Option[A] to an effectful Stream.
Lifts an Option[A] to an effectful Stream.
scala> import cats.effect.SyncIO scala> Stream.fromOption[SyncIO](Some(42)).compile.toList.unsafeRunSync() res0: List[Int] = List(42) scala> Stream.fromOption[SyncIO](None).compile.toList.unsafeRunSync() res1: List[Nothing] = List()
Example: - def fromQueueNoneTerminated[F[_], A](queue: Queue[F, Option[A]], limit: Int)(implicit arg0: Functor[F]): Stream[F, A]
Returns a stream of elements from the supplied queue.
Returns a stream of elements from the supplied queue.
The stream terminates upon dequeuing a
None
.All elements that are available, up to the specified limit, are dequeued and emitted as a single chunk.
- def fromQueueNoneTerminated[F[_], A](queue: QueueSource[F, Option[A]], limit: Int = Int.MaxValue)(implicit arg0: Functor[F]): Stream[F, A]
Returns a stream of elements from the supplied queue.
Returns a stream of elements from the supplied queue.
The stream terminates upon dequeuing a
None
.All elements that are available, up to the specified limit, are dequeued and emitted as a single chunk.
- Annotations
- @nowarn()
- def fromQueueNoneTerminatedChunk[F[_], A](queue: Queue[F, Option[Chunk[A]]], limit: Int): Stream[F, A]
Returns a stream of elements from the supplied queue.
Returns a stream of elements from the supplied queue.
The stream terminates upon dequeuing a
None
.All elements that are available, up to the specified limit, are dequeued and emitted as a single chunk.
- def fromQueueNoneTerminatedChunk[F[_], A](queue: QueueSource[F, Option[Chunk[A]]], limit: Int = Int.MaxValue): Stream[F, A]
Returns a stream of elements from the supplied queue.
Returns a stream of elements from the supplied queue.
The stream terminates upon dequeuing a
None
.All elements that are available, up to the specified limit, are dequeued and emitted as a single chunk.
- def fromQueueUnterminated[F[_], A](queue: Queue[F, A], limit: Int)(implicit arg0: Functor[F]): Stream[F, A]
Returns a stream of elements from the supplied queue.
Returns a stream of elements from the supplied queue.
All elements that are available, up to the specified limit, are dequeued and emitted as a single chunk.
- def fromQueueUnterminated[F[_], A](queue: QueueSource[F, A], limit: Int = Int.MaxValue)(implicit F: Functor[F]): Stream[F, A]
Returns a stream of elements from the supplied queue.
Returns a stream of elements from the supplied queue.
All elements that are available, up to the specified limit, are dequeued and emitted as a single chunk.
- def fromQueueUnterminatedChunk[F[_], A](queue: Queue[F, Chunk[A]], limit: Int)(implicit arg0: Functor[F]): Stream[F, A]
Returns a stream of elements from the supplied queue.
Returns a stream of elements from the supplied queue.
All elements that are available, up to the specified limit, are dequeued and emitted as a single chunk.
- def fromQueueUnterminatedChunk[F[_], A](queue: QueueSource[F, Chunk[A]], limit: Int = Int.MaxValue)(implicit arg0: Functor[F]): Stream[F, A]
Returns a stream of elements from the supplied queue.
Returns a stream of elements from the supplied queue.
All elements that are available, up to the specified limit, are dequeued and emitted as a single chunk.
- implicit def functionKInstance[F[_]]: ~>[F, [β$22$]Stream[F, β$22$]]
FunctionK
instance forF ~> Stream[F, *]
FunctionK
instance forF ~> Stream[F, *]
scala> import cats.Id scala> Stream.functionKInstance[Id](42).compile.toList res0: cats.Id[List[Int]] = List(42)
Example: - implicit def functorFilterInstance[F[_]]: FunctorFilter[[β$18$]Stream[F, β$18$]]
FunctorFilter
instance forStream
.FunctorFilter
instance forStream
.scala> import cats.syntax.all._, scala.util._ scala> Stream("1", "2", "NaN").mapFilter(s => Try(s.toInt).toOption).toList res0: List[Int] = List(1, 2)
Example: - final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @IntrinsicCandidate() @native()
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @IntrinsicCandidate() @native()
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- def iterable[F[x] >: Pure[x], A](os: Iterable[A]): Stream[F, A]
Like
emits
, but works for any class that extendsIterable
- def iterate[F[x] >: Pure[x], A](start: A)(f: (A) => A): Stream[F, A]
An infinite
Stream
that repeatedly applies a given function to a start value.An infinite
Stream
that repeatedly applies a given function to a start value.start
is the first value emitted, followed byf(start)
, thenf(f(start))
, and so on.scala> Stream.iterate(0)(_ + 1).take(10).toList res0: List[Int] = List(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
Example: - def iterateEval[F[_], A](start: A)(f: (A) => F[A]): Stream[F, A]
Like iterate, but takes an effectful function for producing the next state.
Like iterate, but takes an effectful function for producing the next state.
start
is the first value emitted.scala> import cats.effect.SyncIO scala> Stream.iterateEval(0)(i => SyncIO(i + 1)).take(10).compile.toVector.unsafeRunSync() res0: Vector[Int] = Vector(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
Example: - implicit def monadErrorInstance[F[_]](implicit ev: ApplicativeError[F, Throwable]): MonadError[[β$12$]Stream[F, β$12$], Throwable]
MonadError
instance forStream
.MonadError
instance forStream
.scala> import cats.syntax.all._ scala> Stream(1, -2, 3).fproduct(_.abs).toList res0: List[(Int, Int)] = List((1,1), (-2,2), (3,3))
Example: - implicit def monadInstance[F[_]]: Monad[[β$28$]Stream[F, β$28$]]
- Definition Classes
- StreamLowPriority
- implicit def monoidInstance[F[_], O]: Monoid[Stream[F, O]]
Monoid
instance forStream
. - implicit def monoidKInstance[F[_]]: MonoidK[[β$24$]Stream[F, β$24$]]
- final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def never[F[_]](implicit F: Spawn[F]): Stream[F, Nothing]
A stream that never emits and never terminates.
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @IntrinsicCandidate() @native()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @IntrinsicCandidate() @native()
- def raiseError[F[_]](e: Throwable)(implicit arg0: RaiseThrowable[F]): Stream[F, Nothing]
Creates a stream that, when run, fails with the supplied exception.
Creates a stream that, when run, fails with the supplied exception.
The
F
type must be explicitly provided (e.g., viaraiseError[IO]
orraiseError[Fallible]
).scala> import cats.effect.SyncIO scala> Stream.raiseError[Fallible](new RuntimeException).toList res0: Either[Throwable,List[Nothing]] = Left(java.lang.RuntimeException) scala> Stream.raiseError[SyncIO](new RuntimeException).covaryOutput[Int].compile.drain.attempt.unsafeRunSync() res0: Either[Throwable,Unit] = Left(java.lang.RuntimeException)
Example: - def range[F[x] >: Pure[x], O](start: O, stopExclusive: O, step: O)(implicit arg0: Numeric[O]): Stream[F, O]
Lazily produce the sequence
[start, start + step, start + 2 * step, ..., stopExclusive)
.Lazily produce the sequence
[start, start + step, start + 2 * step, ..., stopExclusive)
. If you want to produce the sequence in one chunk, instead of lazily, useemits(start until stopExclusive by step)
.scala> Stream.range(10, 20, 2).toList res0: List[Int] = List(10, 12, 14, 16, 18)
Example: - def range[F[x] >: Pure[x], O](start: O, stopExclusive: O)(implicit arg0: Numeric[O]): Stream[F, O]
Lazily produces the sequence
[start, start + 1, start + 2, ..., stopExclusive)
.Lazily produces the sequence
[start, start + 1, start + 2, ..., stopExclusive)
. If you want to produce the sequence in one chunk, instead of lazily, useemits(start until stopExclusive)
.scala> Stream.range(10, 20).toList res0: List[Int] = List(10, 11, 12, 13, 14, 15, 16, 17, 18, 19)
Example: - def ranges[F[x] >: Pure[x]](start: Int, stopExclusive: Int, size: Int): Stream[F, (Int, Int)]
Lazily produce a sequence of nonoverlapping ranges, where each range contains
size
integers, assuming the upper bound is exclusive.Lazily produce a sequence of nonoverlapping ranges, where each range contains
size
integers, assuming the upper bound is exclusive. Example:ranges(0, 1000, 10)
results in the pairs(0, 10), (10, 20), (20, 30) ... (990, 1000)
Note: The last emitted range may be truncated at
stopExclusive
. For instance,ranges(0,5,4)
results in(0,4), (4,5)
.scala> Stream.ranges(0, 20, 5).toList res0: List[(Int,Int)] = List((0,5), (5,10), (10,15), (15,20))
- Exceptions thrown
IllegalArgumentException
ifsize
<= 0
Example: - def repeatEval[F[_], O](fo: F[O]): Stream[F, O]
Alias for
eval(fo).repeat
. - def resource[F[_], O](r: Resource[F, O])(implicit F: MonadCancel[F, _]): Stream[F, O]
Converts the supplied resource into a singleton stream.
- def resourceK[F[_]](implicit F: MonadCancel[F, _]): ~>[[β$0$]Resource[F, β$0$], [β$1$]Stream[F, β$1$]]
Same as resource, but expressed as a FunctionK.
- def resourceWeak[F[_], O](r: Resource[F, O])(implicit F: MonadCancel[F, _]): Stream[F, O]
Like resource but does not introduce a scope, allowing finalization to occur after subsequent appends or other scope-preserving transformations.
Like resource but does not introduce a scope, allowing finalization to occur after subsequent appends or other scope-preserving transformations.
Scopes can be manually introduced via Stream#scope if desired.
- def resourceWeakK[F[_]](implicit F: MonadCancel[F, _]): ~>[[β$4$]Resource[F, β$4$], [β$5$]Stream[F, β$5$]]
Same as resourceWeak, but expressed as a FunctionK.
- def retry[F[_], O](fo: F[O], delay: FiniteDuration, nextDelay: (FiniteDuration) => FiniteDuration, maxAttempts: Int, retriable: (Throwable) => Boolean = scala.util.control.NonFatal.apply)(implicit arg0: Temporal[F], arg1: RaiseThrowable[F]): Stream[F, O]
Retries
fo
on failure, returning a singleton stream with the result offo
as soon as it succeeds.Retries
fo
on failure, returning a singleton stream with the result offo
as soon as it succeeds.- delay
Duration of delay before the first retry
- nextDelay
Applied to the previous delay to compute the next, e.g. to implement exponential backoff
- maxAttempts
Number of attempts before failing with the latest error, if
fo
never succeeds- retriable
Function to determine whether a failure is retriable or not, defaults to retry every
NonFatal
. A failed stream is immediately returned when a non-retriable failure is encountered
- def sleep[F[_]](d: FiniteDuration)(implicit t: Temporal[F]): Stream[F, Unit]
A single-element
Stream
that waits for the durationd
before emitting unit. - def sleep_[F[_]](d: FiniteDuration)(implicit t: Temporal[F]): Stream[F, Nothing]
Alias for
sleep(d).drain
.Alias for
sleep(d).drain
. Often used in conjunction with++
(i.e.,sleep_(..) ++ s
) as a more performant version ofsleep(..) >> s
. - def supervise[F[_], A](fa: F[A])(implicit F: Spawn[F]): Stream[F, Fiber[F, Throwable, A]]
Starts the supplied task and cancels it as finalization of the returned stream.
- def suspend[F[_], O](s: => Stream[F, O]): Stream[F, O]
Returns a stream that evaluates the supplied by-name each time the stream is used, allowing use of a mutable value in stream computations.
Returns a stream that evaluates the supplied by-name each time the stream is used, allowing use of a mutable value in stream computations.
Note: it's generally easier to reason about such computations using effectful values. That is, allocate the mutable value in an effect and then use
Stream.eval(fa).flatMap { a => ??? }
.scala> Stream.suspend { | val digest = java.security.MessageDigest.getInstance("SHA-256") | val bytes: Stream[Pure,Byte] = ??? | bytes.chunks.fold(digest) { (d,c) => d.update(c.toBytes.values); d } | }
Example: - final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def toString(): String
- Definition Classes
- AnyRef → Any
- def unfold[F[x] >: Pure[x], S, O](s: S)(f: (S) => Option[(O, S)]): Stream[F, O]
Creates a stream by successively applying
f
until aNone
is returned, emitting each outputO
and using each outputS
as input to the next invocation off
.Creates a stream by successively applying
f
until aNone
is returned, emitting each outputO
and using each outputS
as input to the next invocation off
.scala> Stream.unfold(0)(i => if (i < 5) Some(i -> (i+1)) else None).toList res0: List[Int] = List(0, 1, 2, 3, 4)
Example: - def unfoldChunk[F[x] >: Pure[x], S, O](s: S)(f: (S) => Option[(Chunk[O], S)]): Stream[F, O]
Like unfold but each invocation of
f
provides a chunk of output.Like unfold but each invocation of
f
provides a chunk of output.scala> Stream.unfoldChunk(0)(i => if (i < 5) Some(Chunk.from(List.fill(i)(i)) -> (i+1)) else None).toList res0: List[Int] = List(1, 2, 2, 3, 3, 3, 4, 4, 4, 4)
Example: - def unfoldChunkEval[F[_], S, O](s: S)(f: (S) => F[Option[(Chunk[O], S)]]): Stream[F, O]
Like unfoldChunk, but takes an effectful function.
- def unfoldEval[F[_], S, O](s: S)(f: (S) => F[Option[(O, S)]]): Stream[F, O]
Like unfold, but takes an effectful function.
- def unfoldLoop[F[x] <: Pure[x], S, O](start: S)(f: (S) => (O, Option[S])): Stream[F, O]
Creates a stream by successively applying
f
to aS
, emitting each outputO
and using each outputS
as input to the next invocation off
if it is Some, or terminating on NoneCreates a stream by successively applying
f
to aS
, emitting each outputO
and using each outputS
as input to the next invocation off
if it is Some, or terminating on Nonescala> Stream.unfoldLoop(0)(i => (i, if (i < 5) Some(i+1) else None)).toList res0: List[Int] = List(0, 1, 2, 3, 4, 5)
Example: - def unfoldLoopEval[F[_], S, O](start: S)(f: (S) => F[(O, Option[S])]): Stream[F, O]
Like unfoldLoop, but takes an effectful function.
- val unit: Stream[Pure, Unit]
A pure stream that just emits the unit value once and ends.
- 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 wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- object PartiallyAppliedFromIterator extends PartiallyAppliedFromBlockingIteratorCrossCompat
Deprecated Value Members
- def eval_[F[_], A](fa: F[A]): Stream[F, Nothing]
Creates a stream that evaluates the supplied
fa
for its effect, discarding the output value.Creates a stream that evaluates the supplied
fa
for its effect, discarding the output value. As a result, the returned stream emits no elements and hence has output typeNothing
.Alias for
eval(fa).drain
.- Annotations
- @deprecated
- Deprecated
(Since version 2.5.0) Use exec if passing an F[Unit] or eval(fa).drain if passing an F[A]
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable]) @Deprecated
- Deprecated
(Since version 9)