A generic lazy list. It's an immutable iterator with continuations.
The lazy list can be used as an immutable alternative to the standard Rust iterator.
Any List<End = Self>
is an iterator. Any &mut Iterator
is a List<End = Self>
.
See also Generators.
FlatScan
. An order of items is important.
FilterScan
Scan
Fold
FlatMap
. An order of items is not important.
Map
Filter
Flatten
```rust
trait Iterator {
type Item;
fn next(&mut self) -> Option
trait IteratorReturn: Iterator { type Return; fn return(&mut self) -> Return; } ```
```rust
trait Generator {
type Yield;
type Return;
fn resume(&mut self) -> GeneratorState
enum GeneratorState
```rust
trait List {
type Yield;
type Return;
fn resume(self) -> ListState
enum ListState
rust
trait FlatScan {
type InputYield;
type InputReturn;
type OutputYield;
type OutputReturn;
fn map_yield(self, input_yield: Self::InputYield) -> impl List<Yield = Self::OutputYield, Return = Self>;
fn map_return(self, input_return: Self::InputReturn) -> impl List<Yield = Self::OutputYield, Return = OutputReturn>;
}
rust
trait FlatScan {
type InputYield;
type InputReturn;
type OutputYield;
type OutputReturn;
fn map_yield(&mut self, input_yield: Self::InputYield) -> impl Iterator<Item = Self::OutputYield>;
fn map_return(&mut self, input_return: Self::InputReturn) ->
impl Generator<Item = Self::OutputYield, Return = Self::OutputReturn>;
}
rust
trait FlatScan {
type InputYield;
type InputReturn;
type OutputYield;
type OutputReturn;
fn map_yield(&mut self, input_yield: Self::InputYield) -> impl Iterator<Item = Self::OutputYield>;
fn map_return(&mut self, input_return: Self::InputReturn) ->
impl Iterator<Item = Self::OutputYield> + IteratorReturn<Return = Self::OutputReturn>;
}