Packages

abstract class Segment[+O, +R] extends AnyRef

Potentially infinite, pure sequence of values of type O and a result of type R.

All methods on Segment support fusion with other arbitrary methods that return Segments. This is similar to the staging approach described in Stream Fusion, to Completeness, but without code generation in staging.

To force evaluation of one or more values of a segment, call .force followed by one of the operations on the returned Segment.Force type. For example, to convert a segment to a vector, call s.force.toVector.

Stack safety of fused operations is ensured by tracking a fusion depth. If the depth reaches the limit, the computation is trampolined using cats.Eval.

The equals and hashCode methods are not defined for Segment.

Implementation notes:

  • Some operators ask for a segment remainder from within a callback (e.g., emits). As such, segments should update state before invoking callbacks so that remainders can be computed accurately.
Self Type
Segment[O, R]
Source
Segment.scala
Linear Supertypes
Known Subclasses
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. Segment
  2. AnyRef
  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

Instance Constructors

  1. new Segment()

Value Members

  1. final def !=(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  2. final def ##(): Int
    Definition Classes
    AnyRef → Any
  3. def +(other: String): String
    Implicit
    This member is added by an implicit conversion from Segment[O, R] to any2stringadd[Segment[O, R]] performed by method any2stringadd in scala.Predef.
    Definition Classes
    any2stringadd
  4. final def ++[O2 >: O, R2 >: R](s2: Segment[O2, R2]): Segment[O2, R2]

    Concatenates this segment with s2.

    Concatenates this segment with s2.

    Example:
    1. scala> (Segment(1,2,3) ++ Segment(4,5,6)).force.toVector
      res0: Vector[Int] = Vector(1, 2, 3, 4, 5, 6)
  5. def ->[B](y: B): (Segment[O, R], B)
    Implicit
    This member is added by an implicit conversion from Segment[O, R] to ArrowAssoc[Segment[O, R]] performed by method ArrowAssoc in scala.Predef.
    Definition Classes
    ArrowAssoc
    Annotations
    @inline()
  6. final def ==(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  7. final def append[O2 >: O, R2](s2: Segment[O2, R2]): Segment[O2, (R, R2)]

    Like ++ but allows the result type of s2 to differ from R.

  8. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  9. final def asResult[R2](r2: R2): Segment[O, R2]

    Alias for mapResult( => r2).

  10. def clone(): AnyRef
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @native() @throws( ... )
  11. final def collect[O2](pf: PartialFunction[O, O2]): Segment[O2, R]

    Filters and maps simultaneously.

    Filters and maps simultaneously.

    Example:
    1. scala> Segment(Some(1), None, Some(2)).collect { case Some(i) => i }.force.toVector
      res0: Vector[Int] = Vector(1, 2)
  12. final def cons[O2 >: O](o2: O2): Segment[O2, R]

    Equivalent to Segment.singleton(o2) ++ this.

    Equivalent to Segment.singleton(o2) ++ this.

    Example:
    1. scala> Segment(1, 2, 3).cons(0).force.toVector
      res0: Vector[Int] = Vector(0, 1, 2, 3)
  13. final def drain: Segment[Nothing, R]

    Returns a segment that suppresses all output and returns the result of this segment when run.

    Returns a segment that suppresses all output and returns the result of this segment when run.

    Example:
    1. scala> Segment.from(0).take(3).drain.force.run.toOption.get.take(5).force.toVector
      res0: Vector[Long] = Vector(3, 4, 5, 6, 7)
  14. def ensuring(cond: (Segment[O, R]) ⇒ Boolean, msg: ⇒ Any): Segment[O, R]
    Implicit
    This member is added by an implicit conversion from Segment[O, R] to Ensuring[Segment[O, R]] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  15. def ensuring(cond: (Segment[O, R]) ⇒ Boolean): Segment[O, R]
    Implicit
    This member is added by an implicit conversion from Segment[O, R] to Ensuring[Segment[O, R]] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  16. def ensuring(cond: Boolean, msg: ⇒ Any): Segment[O, R]
    Implicit
    This member is added by an implicit conversion from Segment[O, R] to Ensuring[Segment[O, R]] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  17. def ensuring(cond: Boolean): Segment[O, R]
    Implicit
    This member is added by an implicit conversion from Segment[O, R] to Ensuring[Segment[O, R]] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  18. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  19. def equals(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  20. final def filter[O2](p: (O) ⇒ Boolean): Segment[O, R]

    Filters output elements of this segment with the supplied predicate.

    Filters output elements of this segment with the supplied predicate.

    Example:
    1. scala> Segment(1,2,3,4,5).filter(_ % 2 == 0).force.toVector
      res0: Vector[Int] = Vector(2, 4)
  21. def finalize(): Unit
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  22. final def flatMap[O2, R2](f: (O) ⇒ Segment[O2, R2]): Segment[O2, (R, Option[R2])]

    List-like flatMap, which applies f to each element of the segment and concatenates the results.

    List-like flatMap, which applies f to each element of the segment and concatenates the results.

    Example:
    1. scala> Segment(1, 2, 3).flatMap(i => Segment.seq(List.fill(i)(i))).force.toVector
      res0: Vector[Int] = Vector(1, 2, 2, 3, 3, 3)
  23. final def flatMapAccumulate[S, O2](init: S)(f: (S, O) ⇒ Segment[O2, S]): Segment[O2, (R, S)]

    Stateful version of flatMap, where the function depends on a state value initialized to init and updated upon each output.

    Stateful version of flatMap, where the function depends on a state value initialized to init and updated upon each output.

    The final state is returned in the result, paired with the result of the source stream.

    Example:
    1. scala> val src = Segment("Hello", "World", "\n", "From", "Mars").flatMapAccumulate(0)((l,s) =>
           |   if (s == "\n") Segment.empty.asResult(0) else Segment((l,s)).asResult(l + s.length))
      scala> src.force.toVector
      res0: Vector[(Int,String)] = Vector((0,Hello), (5,World), (0,From), (4,Mars))
      scala> src.drain.force.run
      res1: (Unit,Int) = ((),8)
  24. final def flatMapResult[O2 >: O, R2](f: (R) ⇒ Segment[O2, R2]): Segment[O2, R2]

    Like append but allows to use result to continue the segment.

  25. final def flatten[O2, R2 >: R](implicit ev: <:<[O, Segment[O2, R2]]): Segment[O2, R2]

    Flattens a Segment[Segment[O2,R],R] in to a Segment[O2,R].

    Flattens a Segment[Segment[O2,R],R] in to a Segment[O2,R].

    Example:
    1. scala> Segment(Segment(1, 2), Segment(3, 4, 5)).flatten.force.toVector
      res0: Vector[Int] = Vector(1, 2, 3, 4, 5)
  26. final def flattenChunks[O2](implicit ev: <:<[O, Chunk[O2]]): Segment[O2, R]

    Flattens a Segment[Chunk[O2],R] in to a Segment[O2,R].

    Flattens a Segment[Chunk[O2],R] in to a Segment[O2,R].

    Example:
    1. scala> Segment(Chunk(1, 2), Chunk(3, 4, 5)).flattenChunks.force.toVector
      res0: Vector[Int] = Vector(1, 2, 3, 4, 5)
  27. final def fold[B](z: B)(f: (B, O) ⇒ B): Segment[Nothing, (R, B)]

    Folds the output elements of this segment and returns the result as the result of the returned segment.

    Folds the output elements of this segment and returns the result as the result of the returned segment.

    Example:
    1. scala> Segment(1,2,3,4,5).fold(0)(_ + _).force.run
      res0: (Unit, Int) = ((),15)
  28. def force: Force[O, R]

    Provides access to operations which force evaluation of some or all elements of this segment.

  29. def formatted(fmtstr: String): String
    Implicit
    This member is added by an implicit conversion from Segment[O, R] to StringFormat[Segment[O, R]] performed by method StringFormat in scala.Predef.
    Definition Classes
    StringFormat
    Annotations
    @inline()
  30. final def getClass(): Class[_]
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  31. def hashCode(): Int
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  32. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  33. def last: Segment[O, (R, Option[O])]

    Returns a segment that outputs all but the last element from the original segment, returning the last element as part of the result.

    Returns a segment that outputs all but the last element from the original segment, returning the last element as part of the result.

    Example:
    1. scala> Segment(1,2,3).last.drain.force.run
      res0: (Unit, Option[Int]) = ((),Some(3))
      scala> Segment(1,2,3).last.force.toList
      res1: List[Int] = List(1, 2)
  34. def map[O2](f: (O) ⇒ O2): Segment[O2, R]

    Returns a segment that maps each output using the supplied function.

    Returns a segment that maps each output using the supplied function.

    Example:
    1. scala> Segment(1,2,3).map(_ + 1).force.toVector
      res0: Vector[Int] = Vector(2, 3, 4)
  35. def mapAccumulate[S, O2](init: S)(f: (S, O) ⇒ (S, O2)): Segment[O2, (R, S)]

    Stateful version of map, where the map function depends on a state value initialized to init and updated upon each output value.

    Stateful version of map, where the map function depends on a state value initialized to init and updated upon each output value.

    The final state is returned in the result, paired with the result of the source stream.

    Example:
    1. scala> val src = Segment("Hello", "World").mapAccumulate(0)((l,s) => (l + s.length, (l, s)))
      scala> src.force.toVector
      res0: Vector[(Int,String)] = Vector((0,Hello), (5,World))
      scala> src.drain.force.run
      res1: (Unit,Int) = ((),10)
  36. final def mapConcat[O2](f: (O) ⇒ Chunk[O2]): Segment[O2, R]

    Returns a segment that maps each output using the supplied function and concatenates all the results.

    Returns a segment that maps each output using the supplied function and concatenates all the results.

    Example:
    1. scala> Segment(1,2,3).mapConcat(o => Chunk.seq(List.range(0, o))).force.toVector
      res0: Vector[Int] = Vector(0, 0, 1, 0, 1, 2)
  37. final def mapResult[R2](f: (R) ⇒ R2): Segment[O, R2]

    Maps the supplied function over the result of this segment.

    Maps the supplied function over the result of this segment.

    Example:
    1. scala> Segment('a', 'b', 'c').withSize.mapResult { case (_, size) => size }.drain.force.run
      res0: Long = 3
  38. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  39. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  40. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  41. final def prepend[O2 >: O](c: Segment[O2, Any]): Segment[O2, R]

    Equivalent to s2 ++ this.

    Equivalent to s2 ++ this.

    Example:
    1. scala> Segment(1, 2, 3).prepend(Segment(-1, 0)).force.toVector
      res0: Vector[Int] = Vector(-1, 0, 1, 2, 3)
  42. final def scan[B](z: B, emitFinal: Boolean = true)(f: (B, O) ⇒ B): Segment[B, (R, B)]

    Like fold but outputs intermediate results.

    Like fold but outputs intermediate results. If emitFinal is true, upon reaching the end of the stream, the accumulated value is output. If emitFinal is false, the accumulated output is not output. Regardless, the accumulated value is returned as the result of the segment.

    Example:
    1. scala> Segment(1, 2, 3, 4, 5).scan(0)(_+_).force.toVector
      res0: Vector[Int] = Vector(0, 1, 3, 6, 10, 15)
  43. final def sum[N >: O](implicit N: Numeric[N]): Segment[Nothing, N]

    Sums the elements of this segment and returns the sum as the segment result.

    Sums the elements of this segment and returns the sum as the segment result.

    Example:
    1. scala> Segment(1, 2, 3, 4, 5).sum.force.run
      res0: Int = 15
  44. final def synchronized[T0](arg0: ⇒ T0): T0
    Definition Classes
    AnyRef
  45. final def take(n: Long): Segment[O, Either[(R, Long), Segment[O, R]]]

    Lazily takes n elements from this segment.

    Lazily takes n elements from this segment. The result of the returned segment is either a left containing the result of the original segment and the number of elements remaining to take when the end of the source segment was reached, or a right containing the remainder of the source segment after n elements are taken.

    Example:
    1. scala> Segment.from(0).take(3).force.toVector
      res0: Vector[Long] = Vector(0, 1, 2)
      scala> Segment.from(0).take(3).drain.force.run.toOption.get.take(5).force.toVector
      res1: Vector[Long] = Vector(3, 4, 5, 6, 7)
      scala> Segment(1, 2, 3).take(5).drain.force.run
      res2: Either[(Unit, Long),Segment[Int,Unit]] = Left(((),2))
  46. final def takeWhile(p: (O) ⇒ Boolean, takeFailure: Boolean = false): Segment[O, Either[R, Segment[O, R]]]

    Returns a segment that outputs elements while p is true.

    Returns a segment that outputs elements while p is true.

    The result of the returned segment is either the result of the original stream, if the end was reached and the predicate was still passing, or the remaining stream, if the predicate failed. If takeFailure is true, the last element output is the first element which failed the predicate. If takeFailure is false, the first element of the remainder is the first element which failed the predicate.

    Example:
    1. scala> Segment.from(0).takeWhile(_ < 3).force.toVector
      res0: Vector[Long] = Vector(0, 1, 2)
      scala> Segment.from(0).takeWhile(_ < 3, takeFailure = true).force.toVector
      res1: Vector[Long] = Vector(0, 1, 2, 3)
      scala> Segment.from(0).takeWhile(_ < 3).drain.force.run.toOption.get.take(5).force.toVector
      res2: Vector[Long] = Vector(3, 4, 5, 6, 7)
  47. def toString(): String
    Definition Classes
    AnyRef → Any
  48. final def void: Segment[Unit, R]

    Alias for map(_ => ()).

    Alias for map(_ => ()).

    Example:
    1. scala> Segment(1, 2, 3).void.force.toList
      res0: List[Unit] = List((), (), ())
  49. final def voidResult: Segment[O, Unit]

    Returns a new segment which discards the result and replaces it with unit.

    Returns a new segment which discards the result and replaces it with unit.

    Example:
    1. scala> Segment(1, 2, 3).take(2).voidResult
      res0: Segment[Int,Unit] = ((Chunk(1, 2, 3)).take(2)).mapResult(<f1>)
  50. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  51. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  52. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @native() @throws( ... )
  53. def withSize: Segment[O, (R, Long)]

    Returns a new segment which includes the number of elements output in the result.

    Returns a new segment which includes the number of elements output in the result.

    Example:
    1. scala> Segment(1, 2, 3).withSize.drain.force.run
      res0: (Unit,Long) = ((),3)
  54. def zipWith[O2, R2, O3](that: Segment[O2, R2])(f: (O, O2) ⇒ O3): Segment[O3, Either[(R, Segment[O2, R2]), (R2, Segment[O, R])]]

    Zips this segment with another segment using the supplied function to combine elements from this and that.

    Zips this segment with another segment using the supplied function to combine elements from this and that. Terminates when either segment terminates.

    Example:
    1. scala> Segment(1,2,3).zipWith(Segment(4,5,6,7))(_+_).force.toList
      res0: List[Int] = List(5, 7, 9)
  55. def [B](y: B): (Segment[O, R], B)
    Implicit
    This member is added by an implicit conversion from Segment[O, R] to ArrowAssoc[Segment[O, R]] performed by method ArrowAssoc in scala.Predef.
    Definition Classes
    ArrowAssoc

Inherited from AnyRef

Inherited from Any

Inherited by implicit conversion any2stringadd from Segment[O, R] to any2stringadd[Segment[O, R]]

Inherited by implicit conversion StringFormat from Segment[O, R] to StringFormat[Segment[O, R]]

Inherited by implicit conversion Ensuring from Segment[O, R] to Ensuring[Segment[O, R]]

Inherited by implicit conversion ArrowAssoc from Segment[O, R] to ArrowAssoc[Segment[O, R]]

Ungrouped