Packages

final class Stream[+F[_], +O] extends AnyVal

A stream producing output of type O and which may evaluate F effects. If F is Pure, the stream evaluates no effects.

Much of the API of Stream is defined in Stream.InvariantOps.

Laws (using infix syntax):

append forms a monoid in conjunction with empty:

  • empty append s == s and s append empty == s.
  • (s1 append s2) append s3 == s1 append (s2 append s3)

And cons is consistent with using ++ to prepend a single segment:

  • s.cons(seg) == Stream.segment(seg) ++ s

Stream.raiseError propagates until being caught by handleErrorWith:

  • Stream.raiseError(e) handleErrorWith h == h(e)
  • Stream.raiseError(e) ++ s == Stream.raiseError(e)
  • Stream.raiseError(e) flatMap f == Stream.raiseError(e)

Stream forms a monad with emit and flatMap:

  • Stream.emit >=> f == f (left identity)
  • f >=> Stream.emit === f (right identity - note weaker equality notion here)
  • (f >=> g) >=> h == f >=> (g >=> h) (associativity) where Stream.emit(a) is defined as segment(Segment.singleton(a)) and f >=> g is defined as a => a flatMap f flatMap g

The monad is the list-style sequencing monad:

  • (a ++ b) flatMap f == (a flatMap f) ++ (b flatMap f)
  • Stream.empty flatMap f == Stream.empty

Technical notes

Note: since the segment structure of the stream is observable, and s flatMap Stream.emit produces a stream of singleton segments, the right identity law uses a weaker notion of equality, === which normalizes both sides with respect to segment structure:

(s1 === s2) = normalize(s1) == normalize(s2) where == is full equality (a == b iff f(a) is identical to f(b) for all f)

normalize(s) can be defined as s.flatMap(Stream.emit), which just produces a singly-chunked stream from any input stream s.

Note: For efficiency Stream.map function operates on an entire segment at a time and preserves segment structure, which differs from the map derived from the monad (s map f == s flatMap (f andThen Stream.emit)) which would produce singleton segments. In particular, if f throws errors, the segmented version will fail on the first segment with an error, while the unsegmented version will fail on the first element with an error. Exceptions in pure code like this are strongly discouraged.

Source
Stream.scala
Linear Supertypes
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. Stream
  2. AnyVal
  3. Any
Implicitly
  1. by any2stringadd
  2. by StringFormat
  3. by Ensuring
  4. by ArrowAssoc
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Value Members

  1. final def !=(arg0: Any): Boolean
    Definition Classes
    Any
  2. final def ##(): Int
    Definition Classes
    Any
  3. def +(other: String): String
    Implicit
    This member is added by an implicit conversion from Stream[F, O] to any2stringadd[Stream[F, O]] performed by method any2stringadd in scala.Predef.
    Definition Classes
    any2stringadd
  4. def ->[B](y: B): (Stream[F, O], B)
    Implicit
    This member is added by an implicit conversion from Stream[F, O] to ArrowAssoc[Stream[F, O]] performed by method ArrowAssoc in scala.Predef. This conversion will take place only if F is a subclass of Id with Pure (F <: Id with Pure) and at the same time O is a subclass of Nothing (O <: Nothing).
    Definition Classes
    ArrowAssoc
    Annotations
    @inline()
  5. final def ==(arg0: Any): Boolean
    Definition Classes
    Any
  6. def as[O2](o2: O2): Stream[F, O2]

    Alias for _.map(_ => o2).

    Alias for _.map(_ => o2).

    Example:
    1. scala> Stream(1,2,3).as(0).toList
      res0: List[Int] = List(0, 0, 0)
  7. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  8. def attempt: Stream[F, Either[Throwable, O]]

    Returns a stream of O values wrapped in Right until the first error, which is emitted wrapped in Left.

    Returns a stream of O values wrapped in Right until the first error, which is emitted wrapped in Left.

    Example:
    1. scala> (Stream(1,2,3) ++ Stream.raiseError(new RuntimeException) ++ Stream(4,5,6)).attempt.toList
      res0: List[Either[Throwable,Int]] = List(Right(1), Right(2), Right(3), Left(java.lang.RuntimeException))

      rethrow is the inverse of attempt, with the caveat that anything after the first failure is discarded.

  9. def buffer(n: Int): Stream[F, O]

    Behaves like the identity function, but requests n elements at a time from the input.

    Behaves like the identity function, but requests n elements at a time from the input.

    Example:
    1. scala> import cats.effect.IO
      scala> val buf = new scala.collection.mutable.ListBuffer[String]()
      scala> Stream.range(0, 100).covary[IO].
           |   evalMap(i => IO { buf += s">$i"; i }).
           |   buffer(4).
           |   evalMap(i => IO { buf += s"<$i"; i }).
           |   take(10).
           |   compile.toVector.unsafeRunSync
      res0: Vector[Int] = Vector(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
      scala> buf.toList
      res1: List[String] = List(>0, >1, >2, >3, <0, <1, <2, <3, >4, >5, >6, >7, <4, <5, <6, <7, >8, >9, >10, >11, <8, <9)
  10. def bufferAll: Stream[F, O]

    Behaves like the identity stream, but emits no output until the source is exhausted.

    Behaves like the identity stream, but emits no output until the source is exhausted.

    Example:
    1. scala> import cats.effect.IO
      scala> val buf = new scala.collection.mutable.ListBuffer[String]()
      scala> Stream.range(0, 10).covary[IO].
           |   evalMap(i => IO { buf += s">$i"; i }).
           |   bufferAll.
           |   evalMap(i => IO { buf += s"<$i"; i }).
           |   take(4).
           |   compile.toVector.unsafeRunSync
      res0: Vector[Int] = Vector(0, 1, 2, 3)
      scala> buf.toList
      res1: List[String] = List(>0, >1, >2, >3, >4, >5, >6, >7, >8, >9, <0, <1, <2, <3)
  11. def bufferBy(f: (O) ⇒ Boolean): Stream[F, O]

    Behaves like the identity stream, but requests elements from its input in blocks that end whenever the predicate switches from true to false.

    Behaves like the identity stream, but requests elements from its input in blocks that end whenever the predicate switches from true to false.

    Example:
    1. scala> import cats.effect.IO
      scala> val buf = new scala.collection.mutable.ListBuffer[String]()
      scala> Stream.range(0, 10).covary[IO].
           |   evalMap(i => IO { buf += s">$i"; i }).
           |   bufferBy(_ % 2 == 0).
           |   evalMap(i => IO { buf += s"<$i"; i }).
           |   compile.toVector.unsafeRunSync
      res0: Vector[Int] = Vector(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
      scala> buf.toList
      res1: List[String] = List(>0, >1, <0, <1, >2, >3, <2, <3, >4, >5, <4, <5, >6, >7, <6, <7, >8, >9, <8, <9)
  12. def changesBy[O2](f: (O) ⇒ O2)(implicit eq: Eq[O2]): Stream[F, O]

    Emits only elements that are distinct from their immediate predecessors according to f, using natural equality for comparison.

    Emits only elements that are distinct from their immediate predecessors according to f, using natural equality for comparison.

    Note that f is called for each element in the stream multiple times and hence should be fast (e.g., an accessor). It is not intended to be used for computationally intensive conversions. For such conversions, consider something like: src.map(o => (o, f(o))).changesBy(_._2).map(_._1)

    Example:
    1. scala> import cats.implicits._
      scala> Stream(1,1,2,4,6,9).changesBy(_ % 2).toList
      res0: List[Int] = List(1, 2, 9)
  13. def chunkLimit(n: Int): Stream[F, Chunk[O]]

    Outputs chunk with a limited maximum size, splitting as necessary.

    Outputs chunk with a limited maximum size, splitting as necessary.

    Example:
    1. scala> (Stream(1) ++ Stream(2, 3) ++ Stream(4, 5, 6)).chunkLimit(2).toList
      res0: List[Chunk[Int]] = List(Chunk(1), Chunk(2, 3), Chunk(4, 5), Chunk(6))
  14. def chunks: Stream[F, Chunk[O]]

    Outputs all chunks from the source stream.

    Outputs all chunks from the source stream.

    Example:
    1. scala> (Stream(1) ++ Stream(2, 3) ++ Stream(4, 5, 6)).chunks.toList
      res0: List[Chunk[Int]] = List(Chunk(1), Chunk(2, 3), Chunk(4, 5, 6))
  15. def collect[O2](pf: PartialFunction[O, O2]): Stream[F, O2]

    Filters and maps simultaneously.

    Filters and maps simultaneously. Calls collect on each segment in the stream.

    Example:
    1. scala> Stream(Some(1), Some(2), None, Some(3), None, Some(4)).collect { case Some(i) => i }.toList
      res0: List[Int] = List(1, 2, 3, 4)
  16. def collectFirst[O2](pf: PartialFunction[O, O2]): Stream[F, O2]

    Emits the first element of the stream for which the partial function is defined.

    Emits the first element of the stream for which the partial function is defined.

    Example:
    1. scala> Stream(None, Some(1), Some(2), None, Some(3)).collectFirst { case Some(i) => i }.toList
      res0: List[Int] = List(1)
  17. def cons[O2 >: O](s: Segment[O2, Unit]): Stream[F, O2]

    Prepends a segment onto the front of this stream.

    Prepends a segment onto the front of this stream.

    Example:
    1. scala> Stream(1,2,3).cons(Segment.vector(Vector(-1, 0))).toList
      res0: List[Int] = List(-1, 0, 1, 2, 3)
  18. def cons1[O2 >: O](o: O2): Stream[F, O2]

    Prepends a single value onto the front of this stream.

    Prepends a single value onto the front of this stream.

    Example:
    1. scala> Stream(1,2,3).cons1(0).toList
      res0: List[Int] = List(0, 1, 2, 3)
  19. def consChunk[O2 >: O](c: Chunk[O2]): Stream[F, O2]

    Prepends a chunk onto the front of this stream.

    Prepends a chunk onto the front of this stream.

    Example:
    1. scala> Stream(1,2,3).consChunk(Chunk.vector(Vector(-1, 0))).toList
      res0: List[Int] = List(-1, 0, 1, 2, 3)
  20. def covaryOutput[O2 >: O]: Stream[F, O2]

    Lifts this stream to the specified output type.

    Lifts this stream to the specified output type.

    Example:
    1. scala> Stream(Some(1), Some(2), Some(3)).covaryOutput[Option[Int]]
      res0: Stream[Pure,Option[Int]] = Stream(..)
  21. def delete(p: (O) ⇒ Boolean): Stream[F, O]

    Skips the first element that matches the predicate.

    Skips the first element that matches the predicate.

    Example:
    1. scala> Stream.range(1, 10).delete(_ % 2 == 0).toList
      res0: List[Int] = List(1, 3, 4, 5, 6, 7, 8, 9)
  22. def drain: Stream[F, Nothing]

    Removes all output values from this stream.

    Removes all output values from this stream.

    Often used with merge to run one side of the merge for its effect while getting outputs from the opposite side of the merge.

    Example:
    1. scala> import cats.effect.IO
      scala> Stream.eval(IO(println("x"))).drain.compile.toVector.unsafeRunSync
      res0: Vector[Nothing] = Vector()
  23. def drop(n: Long): Stream[F, O]

    Drops n elements of the input, then echoes the rest.

    Drops n elements of the input, then echoes the rest.

    Example:
    1. scala> Stream.range(0,10).drop(5).toList
      res0: List[Int] = List(5, 6, 7, 8, 9)
  24. def dropLast: Stream[F, O]

    Drops the last element.

    Drops the last element.

    Example:
    1. scala> Stream.range(0,10).dropLast.toList
      res0: List[Int] = List(0, 1, 2, 3, 4, 5, 6, 7, 8)
  25. def dropLastIf(p: (O) ⇒ Boolean): Stream[F, O]

    Drops the last element if the predicate evaluates to true.

    Drops the last element if the predicate evaluates to true.

    Example:
    1. scala> Stream.range(0,10).dropLastIf(_ > 5).toList
      res0: List[Int] = List(0, 1, 2, 3, 4, 5, 6, 7, 8)
  26. def dropRight(n: Int): Stream[F, O]

    Outputs all but the last n elements of the input.

    Outputs all but the last n elements of the input.

    Example:
    1. scala> Stream.range(0,10).dropRight(5).toList
      res0: List[Int] = List(0, 1, 2, 3, 4)
  27. def dropThrough(p: (O) ⇒ Boolean): Stream[F, O]

    Like dropWhile, but drops the first value which tests false.

    Like dropWhile, but drops the first value which tests false.

    Example:
    1. scala> Stream.range(0,10).dropThrough(_ != 4).toList
      res0: List[Int] = List(5, 6, 7, 8, 9)
  28. def dropWhile(p: (O) ⇒ Boolean): Stream[F, O]

    Drops elements from the head of this stream until the supplied predicate returns false.

    Drops elements from the head of this stream until the supplied predicate returns false.

    Example:
    1. scala> Stream.range(0,10).dropWhile(_ != 4).toList
      res0: List[Int] = List(4, 5, 6, 7, 8, 9)
  29. def ensuring(cond: (Stream[F, O]) ⇒ Boolean, msg: ⇒ Any): Stream[F, O]
    Implicit
    This member is added by an implicit conversion from Stream[F, O] to Ensuring[Stream[F, O]] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  30. def ensuring(cond: (Stream[F, O]) ⇒ Boolean): Stream[F, O]
    Implicit
    This member is added by an implicit conversion from Stream[F, O] to Ensuring[Stream[F, O]] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  31. def ensuring(cond: Boolean, msg: ⇒ Any): Stream[F, O]
    Implicit
    This member is added by an implicit conversion from Stream[F, O] to Ensuring[Stream[F, O]] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  32. def ensuring(cond: Boolean): Stream[F, O]
    Implicit
    This member is added by an implicit conversion from Stream[F, O] to Ensuring[Stream[F, O]] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  33. def exists(p: (O) ⇒ Boolean): Stream[F, Boolean]

    Emits true as soon as a matching element is received, else false if no input matches.

    Emits true as soon as a matching element is received, else false if no input matches.

    Example:
    1. scala> Stream.range(0,10).exists(_ == 4).toList
      res0: List[Boolean] = List(true)
      scala> Stream.range(0,10).exists(_ == 10).toList
      res1: List[Boolean] = List(false)
  34. def filter(p: (O) ⇒ Boolean): Stream[F, O]

    Emits only inputs which match the supplied predicate.

    Emits only inputs which match the supplied predicate.

    Example:
    1. scala> Stream.range(0,10).filter(_ % 2 == 0).toList
      res0: List[Int] = List(0, 2, 4, 6, 8)
  35. def filterWithPrevious(f: (O, O) ⇒ Boolean): Stream[F, O]

    Like filter, but the predicate f depends on the previously emitted and current elements.

    Like filter, but the predicate f depends on the previously emitted and current elements.

    Example:
    1. scala> Stream(1, -1, 2, -2, 3, -3, 4, -4).filterWithPrevious((previous, current) => previous < current).toList
      res0: List[Int] = List(1, 2, 3, 4)
  36. def find(f: (O) ⇒ Boolean): Stream[F, O]

    Emits the first input (if any) which matches the supplied predicate.

    Emits the first input (if any) which matches the supplied predicate.

    Example:
    1. scala> Stream.range(1,10).find(_ % 2 == 0).toList
      res0: List[Int] = List(2)
  37. def fold[O2](z: O2)(f: (O2, O) ⇒ O2): Stream[F, O2]

    Folds all inputs using an initial value z and supplied binary operator, and emits a single element stream.

    Folds all inputs using an initial value z and supplied binary operator, and emits a single element stream.

    Example:
    1. scala> Stream(1, 2, 3, 4, 5).fold(0)(_ + _).toList
      res0: List[Int] = List(15)
  38. def fold1[O2 >: O](f: (O2, O2) ⇒ O2): Stream[F, O2]

    Folds all inputs using the supplied binary operator, and emits a single-element stream, or the empty stream if the input is empty.

    Folds all inputs using the supplied binary operator, and emits a single-element stream, or the empty stream if the input is empty.

    Example:
    1. scala> Stream(1, 2, 3, 4, 5).fold1(_ + _).toList
      res0: List[Int] = List(15)
  39. def foldMap[O2](f: (O) ⇒ O2)(implicit O2: Monoid[O2]): Stream[F, O2]

    Alias for map(f).foldMonoid.

    Alias for map(f).foldMonoid.

    Example:
    1. scala> import cats.implicits._
      scala> Stream(1, 2, 3, 4, 5).foldMap(_ => 1).toList
      res0: List[Int] = List(5)
  40. def forall(p: (O) ⇒ Boolean): Stream[F, Boolean]

    Emits a single true value if all input matches the predicate.

    Emits a single true value if all input matches the predicate. Halts with false as soon as a non-matching element is received.

    Example:
    1. scala> Stream(1, 2, 3, 4, 5).forall(_ < 10).toList
      res0: List[Boolean] = List(true)
  41. def formatted(fmtstr: String): String
    Implicit
    This member is added by an implicit conversion from Stream[F, O] to StringFormat[Stream[F, O]] performed by method StringFormat in scala.Predef.
    Definition Classes
    StringFormat
    Annotations
    @inline()
  42. def getClass(): Class[_ <: AnyVal]
    Definition Classes
    AnyVal → Any
  43. def groupAdjacentBy[O2](f: (O) ⇒ O2)(implicit eq: Eq[O2]): Stream[F, (O2, Segment[O, Unit])]

    Partitions the input into a stream of segments according to a discriminator function.

    Partitions the input into a stream of segments according to a discriminator function.

    Each chunk in the source stream is grouped using the supplied discriminator function and the results of the grouping are emitted each time the discriminator function changes values.

    Example:
    1. scala> import cats.implicits._
      scala> Stream("Hello", "Hi", "Greetings", "Hey").groupAdjacentBy(_.head).toList.map { case (k,vs) => k -> vs.force.toList }
      res0: List[(Char,List[String])] = List((H,List(Hello, Hi)), (G,List(Greetings)), (H,List(Hey)))
  44. def head: Stream[F, O]

    Emits the first element of this stream (if non-empty) and then halts.

    Emits the first element of this stream (if non-empty) and then halts.

    Example:
    1. scala> Stream(1, 2, 3).head.toList
      res0: List[Int] = List(1)
  45. def intersperse[O2 >: O](separator: O2): Stream[F, O2]

    Emits the specified separator between every pair of elements in the source stream.

    Emits the specified separator between every pair of elements in the source stream.

    Example:
    1. scala> Stream(1, 2, 3, 4, 5).intersperse(0).toList
      res0: List[Int] = List(1, 0, 2, 0, 3, 0, 4, 0, 5)
  46. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  47. def last: Stream[F, Option[O]]

    Returns the last element of this stream, if non-empty.

    Returns the last element of this stream, if non-empty.

    Example:
    1. scala> Stream(1, 2, 3).last.toList
      res0: List[Option[Int]] = List(Some(3))
  48. def lastOr[O2 >: O](fallback: ⇒ O2): Stream[F, O2]

    Returns the last element of this stream, if non-empty, otherwise the supplied fallback value.

    Returns the last element of this stream, if non-empty, otherwise the supplied fallback value.

    Example:
    1. scala> Stream(1, 2, 3).lastOr(0).toList
      res0: List[Int] = List(3)
      scala> Stream.empty.lastOr(0).toList
      res1: List[Int] = List(0)
  49. def map[O2](f: (O) ⇒ O2): Stream[F, O2]

    Applies the specified pure function to each input and emits the result.

    Applies the specified pure function to each input and emits the result.

    Example:
    1. scala> Stream("Hello", "World!").map(_.size).toList
      res0: List[Int] = List(5, 6)
  50. def mapAccumulate[S, O2](init: S)(f: (S, O) ⇒ (S, O2)): Stream[F, (S, O2)]

    Maps a running total according to S and the input with the function f.

    Maps a running total according to S and the input with the function f.

    Example:
    1. scala> Stream("Hello", "World").mapAccumulate(0)((l, s) => (l + s.length, s.head)).toVector
      res0: Vector[(Int, Char)] = Vector((5,H), (10,W))
  51. def mapChunks[O2](f: (Chunk[O]) ⇒ Segment[O2, Unit]): Stream[F, O2]

    Applies the specified pure function to each chunk in this stream.

    Applies the specified pure function to each chunk in this stream.

    Example:
    1. scala> Stream(1, 2, 3).append(Stream(4, 5, 6)).mapChunks { c => val ints = c.toInts; for (i <- 0 until ints.values.size) ints.values(i) = 0; ints.toSegment }.toList
      res0: List[Int] = List(0, 0, 0, 0, 0, 0)
  52. def mapSegments[O2](f: (Segment[O, Unit]) ⇒ Segment[O2, Unit]): Stream[F, O2]

    Applies the specified pure function to each segment in this stream.

    Applies the specified pure function to each segment in this stream.

    Example:
    1. scala> (Stream.range(1,5) ++ Stream.range(5,10)).mapSegments(s => s.scan(0)(_ + _).voidResult).toList
      res0: List[Int] = List(0, 1, 3, 6, 10, 0, 5, 11, 18, 26, 35)
  53. def mask: Stream[F, O]

    Behaves like the identity function but halts the stream on an error and does not return the error.

    Behaves like the identity function but halts the stream on an error and does not return the error.

    Example:
    1. scala> (Stream(1,2,3) ++ Stream.raiseError(new RuntimeException) ++ Stream(4, 5, 6)).mask.toList
      res0: List[Int] = List(1, 2, 3)
  54. def noneTerminate: Stream[F, Option[O]]

    Emits each output wrapped in a Some and emits a None at the end of the stream.

    Emits each output wrapped in a Some and emits a None at the end of the stream.

    s.noneTerminate.unNoneTerminate == s

    Example:
    1. scala> Stream(1,2,3).noneTerminate.toList
      res0: List[Option[Int]] = List(Some(1), Some(2), Some(3), None)
  55. def reduce[O2 >: O](f: (O2, O2) ⇒ O2): Stream[F, O2]

    Alias for fold1.

  56. def repeat: Stream[F, O]

    Repeat this stream an infinite number of times.

    Repeat this stream an infinite number of times.

    s.repeat == s ++ s ++ s ++ ...

    Example:
    1. scala> Stream(1,2,3).repeat.take(8).toList
      res0: List[Int] = List(1, 2, 3, 1, 2, 3, 1, 2)
  57. def rethrow[O2](implicit ev: <:<[O, Either[Throwable, O2]]): Stream[F, O2]

    Converts a Stream[F,Either[Throwable,O]] to a Stream[F,O], which emits right values and fails upon the first Left(t).

    Converts a Stream[F,Either[Throwable,O]] to a Stream[F,O], which emits right values and fails upon the first Left(t). Preserves chunkiness.

    Example:
    1. scala> Stream(Right(1), Right(2), Left(new RuntimeException), Right(3)).rethrow.handleErrorWith(t => Stream(-1)).toList
      res0: List[Int] = List(-1)
  58. def scan[O2](z: O2)(f: (O2, O) ⇒ O2): Stream[F, O2]

    Left fold which outputs all intermediate results.

    Left fold which outputs all intermediate results.

    Example:
    1. scala> Stream(1,2,3,4).scan(0)(_ + _).toList
      res0: List[Int] = List(0, 1, 3, 6, 10)

      More generally: Stream().scan(z)(f) == Stream(z) Stream(x1).scan(z)(f) == Stream(z, f(z,x1)) Stream(x1,x2).scan(z)(f) == Stream(z, f(z,x1), f(f(z,x1),x2)) etc

  59. def scan1[O2 >: O](f: (O2, O2) ⇒ O2): Stream[F, O2]

    Like scan, but uses the first element of the stream as the seed.

    Like scan, but uses the first element of the stream as the seed.

    Example:
    1. scala> Stream(1,2,3,4).scan1(_ + _).toList
      res0: List[Int] = List(1, 3, 6, 10)
  60. def scope: Stream[F, O]

    Scopes are typically inserted automatically, at the boundary of a pull (i.e., when a pull is converted to a stream).

    Scopes are typically inserted automatically, at the boundary of a pull (i.e., when a pull is converted to a stream). This method allows a scope to be explicitly demarcated so that resources can be freed earlier than when using automatically inserted scopes. This is useful when using streamNoScope to convert from Pull to Stream -- i.e., by choosing to *not* have scopes inserted automatically, you may end up needing to demarcate scopes manually at a higher level in the stream structure.

    Note: see the disclaimer about the use of streamNoScope.

  61. def segmentLimit(n: Int): Stream[F, Segment[O, Unit]]

    Outputs the segments of this stream as output values, ensuring each segment has maximum size n, splitting segments as necessary.

    Outputs the segments of this stream as output values, ensuring each segment has maximum size n, splitting segments as necessary.

    Example:
    1. scala> Stream(1,2,3).repeat.segmentLimit(2).take(5).toList
      res0: List[Segment[Int,Unit]] = List(Chunk(1, 2), Chunk(3), Chunk(1, 2), Chunk(3), Chunk(1, 2))
  62. def segmentN(n: Int, allowFewer: Boolean = true): Stream[F, Segment[O, Unit]]

    Outputs segments of size n.

    Outputs segments of size n.

    Segments from the source stream are split as necessary. If allowFewer is true, the last segment that is emitted may have less than n elements.

    Example:
    1. scala> Stream(1,2,3).repeat.segmentN(2).take(5).toList
      res0: List[Segment[Int,Unit]] = List(Chunk(1, 2), catenated(Chunk(3), Chunk(1)), Chunk(2, 3), Chunk(1, 2), catenated(Chunk(3), Chunk(1)))
  63. def segments: Stream[F, Segment[O, Unit]]

    Outputs all segments from the source stream.

    Outputs all segments from the source stream.

    Example:
    1. scala> Stream(1,2,3).repeat.segments.take(5).toList
      res0: List[Segment[Int,Unit]] = List(Chunk(1, 2, 3), Chunk(1, 2, 3), Chunk(1, 2, 3), Chunk(1, 2, 3), Chunk(1, 2, 3))
  64. def sliding(n: Int): Stream[F, Queue[O]]

    Groups inputs in fixed size chunks by passing a "sliding window" of size n over them.

    Groups inputs in fixed size chunks by passing a "sliding window" of size n over them. If the input contains less than or equal to n elements, only one chunk of this size will be emitted.

    Example:
    1. scala> Stream(1, 2, 3, 4).sliding(2).toList
      res0: List[scala.collection.immutable.Queue[Int]] = List(Queue(1, 2), Queue(2, 3), Queue(3, 4))
    Exceptions thrown

    scala.IllegalArgumentException if n <= 0

  65. def split(f: (O) ⇒ Boolean): Stream[F, Segment[O, Unit]]

    Breaks the input into chunks where the delimiter matches the predicate.

    Breaks the input into chunks where the delimiter matches the predicate. The delimiter does not appear in the output. Two adjacent delimiters in the input result in an empty chunk in the output.

    Example:
    1. scala> Stream.range(0, 10).split(_ % 4 == 0).toList
      res0: List[Segment[Int,Unit]] = List(empty, catenated(Chunk(1), Chunk(2), Chunk(3), empty), catenated(Chunk(5), Chunk(6), Chunk(7), empty), Chunk(9))
  66. def tail: Stream[F, O]

    Emits all elements of the input except the first one.

    Emits all elements of the input except the first one.

    Example:
    1. scala> Stream(1,2,3).tail.toList
      res0: List[Int] = List(2, 3)
  67. def take(n: Long): Stream[F, O]

    Emits the first n elements of this stream.

    Emits the first n elements of this stream.

    Example:
    1. scala> Stream.range(0,1000).take(5).toList
      res0: List[Int] = List(0, 1, 2, 3, 4)
  68. def takeRight(n: Long): Stream[F, O]

    Emits the last n elements of the input.

    Emits the last n elements of the input.

    Example:
    1. scala> Stream.range(0,1000).takeRight(5).toList
      res0: List[Int] = List(995, 996, 997, 998, 999)
  69. def takeThrough(p: (O) ⇒ Boolean): Stream[F, O]

    Like takeWhile, but emits the first value which tests false.

    Like takeWhile, but emits the first value which tests false.

    Example:
    1. scala> Stream.range(0,1000).takeThrough(_ != 5).toList
      res0: List[Int] = List(0, 1, 2, 3, 4, 5)
  70. def takeWhile(p: (O) ⇒ Boolean, takeFailure: Boolean = false): Stream[F, O]

    Emits the longest prefix of the input for which all elements test true according to f.

    Emits the longest prefix of the input for which all elements test true according to f.

    Example:
    1. scala> Stream.range(0,1000).takeWhile(_ != 5).toList
      res0: List[Int] = List(0, 1, 2, 3, 4)
  71. def toString(): String
    Definition Classes
    Stream → Any
  72. def unNone[O2](implicit ev: <:<[O, Option[O2]]): Stream[F, O2]

    Filters any 'None'.

    Filters any 'None'.

    Example:
    1. scala> Stream(Some(1), Some(2), None, Some(3), None).unNone.toList
      res0: List[Int] = List(1, 2, 3)
  73. def unNoneTerminate[O2](implicit ev: <:<[O, Option[O2]]): Stream[F, O2]

    Halts the input stream at the first None.

    Halts the input stream at the first None.

    Example:
    1. scala> Stream(Some(1), Some(2), None, Some(3), None).unNoneTerminate.toList
      res0: List[Int] = List(1, 2)
  74. def unchunk: Stream[F, O]

    Converts the input to a stream of 1-element chunks.

    Converts the input to a stream of 1-element chunks.

    Example:
    1. scala> (Stream(1,2,3) ++ Stream(4,5,6)).unchunk.segments.toList
      res0: List[Segment[Int,Unit]] = List(Chunk(1), Chunk(2), Chunk(3), Chunk(4), Chunk(5), Chunk(6))
  75. def zipWithIndex: Stream[F, (O, Long)]

    Zips the elements of the input stream with its indices, and returns the new stream.

    Zips the elements of the input stream with its indices, and returns the new stream.

    Example:
    1. scala> Stream("The", "quick", "brown", "fox").zipWithIndex.toList
      res0: List[(String,Long)] = List((The,0), (quick,1), (brown,2), (fox,3))
  76. def zipWithNext: Stream[F, (O, Option[O])]

    Zips each element of this stream with the next element wrapped into Some.

    Zips each element of this stream with the next element wrapped into Some. The last element is zipped with None.

    Example:
    1. scala> Stream("The", "quick", "brown", "fox").zipWithNext.toList
      res0: List[(String,Option[String])] = List((The,Some(quick)), (quick,Some(brown)), (brown,Some(fox)), (fox,None))
  77. def zipWithPrevious: Stream[F, (Option[O], O)]

    Zips each element of this stream with the previous element wrapped into Some.

    Zips each element of this stream with the previous element wrapped into Some. The first element is zipped with None.

    Example:
    1. scala> Stream("The", "quick", "brown", "fox").zipWithPrevious.toList
      res0: List[(Option[String],String)] = List((None,The), (Some(The),quick), (Some(quick),brown), (Some(brown),fox))
  78. def zipWithPreviousAndNext: Stream[F, (Option[O], O, Option[O])]

    Zips each element of this stream with its previous and next element wrapped into Some.

    Zips each element of this stream with its previous and next element wrapped into Some. The first element is zipped with None as the previous element, the last element is zipped with None as the next element.

    Example:
    1. scala> Stream("The", "quick", "brown", "fox").zipWithPreviousAndNext.toList
      res0: List[(Option[String],String,Option[String])] = List((None,The,Some(quick)), (Some(The),quick,Some(brown)), (Some(quick),brown,Some(fox)), (Some(brown),fox,None))
  79. def zipWithScan[O2](z: O2)(f: (O2, O) ⇒ O2): Stream[F, (O, O2)]

    Zips the input with a running total according to S, up to but not including the current element.

    Zips the input with a running total according to S, up to but not including the current element. Thus the initial z value is the first emitted to the output:

    Example:
    1. scala> Stream("uno", "dos", "tres", "cuatro").zipWithScan(0)(_ + _.length).toList
      res0: List[(String,Int)] = List((uno,0), (dos,3), (tres,6), (cuatro,10))
    See also

    zipWithScan1

  80. def zipWithScan1[O2](z: O2)(f: (O2, O) ⇒ O2): Stream[F, (O, O2)]

    Zips the input with a running total according to S, including the current element.

    Zips the input with a running total according to S, including the current element. Thus the initial z value is the first emitted to the output:

    Example:
    1. scala> Stream("uno", "dos", "tres", "cuatro").zipWithScan1(0)(_ + _.length).toList
      res0: List[(String, Int)] = List((uno,3), (dos,6), (tres,10), (cuatro,16))
    See also

    zipWithScan

  81. def [B](y: B): (Stream[F, O], B)
    Implicit
    This member is added by an implicit conversion from Stream[F, O] to ArrowAssoc[Stream[F, O]] performed by method ArrowAssoc in scala.Predef. This conversion will take place only if F is a subclass of Id with Pure (F <: Id with Pure) and at the same time O is a subclass of Nothing (O <: Nothing).
    Definition Classes
    ArrowAssoc

Inherited from AnyVal

Inherited from Any

Inherited by implicit conversion any2stringadd from Stream[F, O] to any2stringadd[Stream[F, O]]

Inherited by implicit conversion StringFormat from Stream[F, O] to StringFormat[Stream[F, O]]

Inherited by implicit conversion Ensuring from Stream[F, O] to Ensuring[Stream[F, O]]

Inherited by implicit conversion ArrowAssoc from Stream[F, O] to ArrowAssoc[Stream[F, O]]

Ungrouped