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 byyld.evolve().h8io.stages.Status.Success+h8io.stages.Yield.None: no output was produced; the loop stops and emits aYield.NonewithSuccessstatus whose continuation is the stage selected byyld.evolve(), wrapped back inLoop.h8io.stages.Status.Completewith no errors: the loop stops, converts the status back toSuccess, and wraps the stage selected byyld.evolve()inLoopfor the next outer invocation.h8io.stages.Status.Completewith 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 → Tto loop
- Alphabetic
- By Inheritance
- Loop
- Serializable
- Serializable
- Product
- Equals
- Alterator
- Stage
- Function1
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
Instance Constructors
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
-
val
alterand: Endo[T, E]
The wrapped stage whose behavior is modified by this operator.
-
def
andThen[A](g: (Yield[T, T, E]) ⇒ A): (T) ⇒ A
- Definition Classes
- Function1
- Annotations
- @unspecialized()
-
def
apply(in: T): Yield[T, T, E]
Processes
inand returns the Yield carrying the optional output, the status and the continuation. -
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
-
def
clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native() @IntrinsicCandidate()
-
def
compose[A](g: (A) ⇒ T): (A) ⇒ Yield[T, T, E]
- Definition Classes
- Function1
- Annotations
- @unspecialized()
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @IntrinsicCandidate()
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @IntrinsicCandidate()
-
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
applywhenever 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. Likeapply,skip()may perform side effects — a decorator, for instance, may advance or release the inner stage it owns. -
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
def
toString(): String
- Definition Classes
- Function1 → AnyRef → Any
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
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
-
def
finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] ) @Deprecated
- Deprecated