Packages

final case class Loop[T, +E](alterand: Endo[T, E]) extends Decorator[T, T, E] with Product with Serializable

A decorator that feeds the output of each successful step back as the input of the next, effectively looping the inner endomorphic stage until it stops.

The tail-recursive loop works as follows:

  • h8io.stages.Status.Success + h8io.stages.Yield.Some: the output becomes the new input and the loop continues with the stage selected by yld.evolve().
  • h8io.stages.Status.Success + h8io.stages.Yield.None: no output was produced; the loop stops and emits a Yield.None with Success status whose continuation is the stage selected by yld.evolve(), wrapped back in Loop.
  • h8io.stages.Status.Complete with no errors: the loop stops, converts the status back to Success, and wraps the stage selected by yld.evolve() in Loop for the next outer invocation.
  • h8io.stages.Status.Complete with errors: the loop stops, preserves the errors, and selects the continuation the same way.

In every branch the continuation of the inner stage is selected by the status the inner stage itself produced, and never by the status Loop reports to the enclosing pipeline — the two differ, since an error-free Complete is absorbed into a Success. For the same reason the returned evolution is a h8io.stages.base.ConstEvolution: the status the enclosing pipeline evolves Loop with belongs to that pipeline, not to the inner stage, and must not be passed inwards. Symmetrically, a skipped Loop skips its inner stage and selects the inner continuation on the neutral Status.Success. The returned ConstEvolution keeps the inner evolution's dispose as its own: per the h8io.stages.Evolution contract, the inner evolution stays the terminal cleanup handle for the generation constructed here until that generation runs.

This makes Loop suitable for in-process iterative computations (e.g., fixed-point iterations) where the result of one step seeds the next.

T

the value type (both input and output)

E

the error type (covariant)

alterand

the inner endomorphic stage T → T to loop

Linear Supertypes
Serializable, Serializable, Product, Equals, Alterator[Stage[T, T, E], T, T, E], Stage[T, T, E], (T) ⇒ Yield[T, T, E], AnyRef, Any
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. Loop
  2. Serializable
  3. Serializable
  4. Product
  5. Equals
  6. Alterator
  7. Stage
  8. Function1
  9. AnyRef
  10. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Instance Constructors

  1. new Loop(alterand: Endo[T, E])

    alterand

    the inner endomorphic stage T → T to loop

Value Members

  1. final def !=(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  2. final def ##(): Int
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  4. val alterand: Endo[T, E]

    The wrapped stage whose behavior is modified by this operator.

    The wrapped stage whose behavior is modified by this operator.

    Definition Classes
    Loop → Alterator
  5. def andThen[A](g: (Yield[T, T, E]) ⇒ A): (T) ⇒ A
    Definition Classes
    Function1
    Annotations
    @unspecialized()
  6. def apply(in: T): Yield[T, T, E]

    Processes in and returns the Yield carrying the optional output, the status and the continuation.

    Processes in and returns the Yield carrying the optional output, the status and the continuation.

    A stage that throws from here must have released its own resources first — see the Lifecycle section above.

    Definition Classes
    Loop → Stage → Function1
  7. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  8. def clone(): AnyRef
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... ) @native() @IntrinsicCandidate()
  9. def compose[A](g: (A) ⇒ T): (A) ⇒ Yield[T, T, E]
    Definition Classes
    Function1
    Annotations
    @unspecialized()
  10. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  11. final def getClass(): Class[_]
    Definition Classes
    AnyRef → Any
    Annotations
    @native() @IntrinsicCandidate()
  12. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  13. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  14. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native() @IntrinsicCandidate()
  15. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native() @IntrinsicCandidate()
  16. def skip(): Evolution[T, T, E]

    Returns this stage's Evolution without consuming an input.

    Returns this stage's Evolution without consuming an input.

    Called instead of apply whenever the stage takes part in a run but has nothing to process: the upstream yielded no output, or a binary operator excluded this branch. The evolution must be the one the stage would have returned had it run. Like apply, skip() may perform side effects — a decorator, for instance, may advance or release the inner stage it owns.

    Definition Classes
    Loop → Stage
  17. final def synchronized[T0](arg0: ⇒ T0): T0
    Definition Classes
    AnyRef
  18. def toString(): String
    Definition Classes
    Function1 → AnyRef → Any
  19. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  20. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... ) @native()
  21. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  22. final def ~>[_O, _E >: E](that: Stage[T, _O, _E]): Stage[T, _O, _E]

    Composes this stage with that, feeding this stage's output into it.

    Composes this stage with that, feeding this stage's output into it. See the Composition section above for what happens when there is no output to feed.

    Definition Classes
    Stage
    Annotations
    @inline()

Deprecated Value Members

  1. def finalize(): Unit
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] ) @Deprecated
    Deprecated

Inherited from Serializable

Inherited from Serializable

Inherited from Product

Inherited from Equals

Inherited from Alterator[Stage[T, T, E], T, T, E]

Inherited from Stage[T, T, E]

Inherited from (T) ⇒ Yield[T, T, E]

Inherited from AnyRef

Inherited from Any

Ungrouped