iter

package
v0.2.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 11, 2022 License: MIT Imports: 5 Imported by: 5

Documentation

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func Collect

func Collect[T any](iter Iterator[T]) []T

Collect consumes an Iterator and returns all remaining items within a slice. It does not protect against infinite Iterators.

Types

type CountIter

type CountIter struct {
	// contains filtered or unexported fields
}

CountIter implements `Count`. See `Count`'s documentation.

func Count

func Count() *CountIter

Count instantiates a `CountIter` that will iterate over 0 and the natural numbers. Count is functionally "unlimited" although it does not protect against the integer limit.

func (*CountIter) Next

func (c *CountIter) Next() option.Option[int]

Next implements the Iterator interface for `CountIter`.

type DropIter

type DropIter[T any] struct {
	// contains filtered or unexported fields
}

DropIter implements `Drop`. See `Drop`'s documentation.

func Drop

func Drop[T any](iter Iterator[T], count uint) *DropIter[T]

Drop instantiates a `DropIter` that will skip the number of items of its wrapped iterator by the provided count.

Example
package main

import (
	"fmt"

	"github.com/BooleanCat/go-functional/iter"
)

func main() {
	counter := iter.Drop[int](iter.Count(), 2)
	fmt.Println(counter.Next().Unwrap())
}
Output:

2

func (*DropIter[T]) Next

func (iter *DropIter[T]) Next() option.Option[T]

Next implements the Iterator interface for `DropIter`.

type ExhaustedIter

type ExhaustedIter[T any] struct{}

ExhaustedIter implements `Exhausted`. See `Exhausted`'s documentation.

func Exhausted

func Exhausted[T any]() *ExhaustedIter[T]

Exhausted instantiates an `ExhaustedIter` that will immediately be exhausted (`Next` will always return a `None` variant).

func (*ExhaustedIter[T]) Next

func (iter *ExhaustedIter[T]) Next() option.Option[T]

Next implements the Iterator interface for `ExhaustedIter`.

type FilterIter

type FilterIter[T any] struct {
	// contains filtered or unexported fields
}

FilterIter implements `Filter`. See `Filter`'s documentation.

func Exclude

func Exclude[T any](iter Iterator[T], fun func(T) bool) *FilterIter[T]

Exclude instantiates a `FilterIter` that selectively yields only results that cause the provided function to return `false`.

func Filter

func Filter[T any](iter Iterator[T], fun func(T) bool) *FilterIter[T]

Filter instantiates a `FilterIter` that selectively yields only results that cause the provided function to return `true`.

func (*FilterIter[T]) Next

func (iter *FilterIter[T]) Next() option.Option[T]

Next implements the Iterator interface for `Filter`.

type Iterator

type Iterator[T any] interface {
	Next() option.Option[T]
}

Iterator declares that each Iterator must implement a Next method. Successive calls to the next method shall return the next item in the Iterator, wrapped in an `Option.Some` variant.

Exhausted Iterators shall return a `None` variant of `Option` on every subsequent call.

type LiftIter

type LiftIter[T any] struct {
	// contains filtered or unexported fields
}

LiftIter implements `Lift`. See `Lift`'s documentation.

func Lift

func Lift[T any](items []T) *LiftIter[T]

Lift instantiates a `LiftIter` that will yield all items in the provided slice.

func (*LiftIter[T]) Next

func (iter *LiftIter[T]) Next() option.Option[T]

Next implements the Iterator interface for `Lift`.

type LinesIter

type LinesIter struct {
	// contains filtered or unexported fields
}

LinesIter implements `Lines`. See `Lines`' documentation.

func Lines

func Lines(r io.Reader) *LinesIter

Lines instantiates a `LinesIter` that will yield each line from the provided `io.Reader`.

Be aware that since `Read` operations can fail, the result time of each item is `result.Result[[]byte]`. Errors will need to be handled as a failure is wrapped in an Ok variant. Multiple calls to `Next()` may simply repeat the same error and cause an infinite loop when collected.

func (*LinesIter) Next

func (iter *LinesIter) Next() option.Option[result.Result[[]byte]]

Next implements the Iterator interface for `LinesIter`.

type MapIter

type MapIter[T, U any] struct {
	// contains filtered or unexported fields
}

MapIter implements `Map`. See `Map`'s documentation.

func LinesString

func LinesString(r io.Reader) *MapIter[result.Result[[]byte], result.Result[string]]

LinesString instantiates a `LinesIter` with results converted to a string via a MapIter. See `Lines` documentation for more information.

func Map

func Map[T, U any](iter Iterator[T], f func(T) U) *MapIter[T, U]

Take instantiates a `MapIter` that will apply the provided function to each item yielded by the provided Iterator.

func (*MapIter[T, U]) Next

func (iter *MapIter[T, U]) Next() option.Option[U]

Next implements the Iterator interface for `MapIter`.

type TakeIter

type TakeIter[T any] struct {
	// contains filtered or unexported fields
}

TakeIter implements `Take`. See `Take`'s documentation.

func Take

func Take[T any](iter Iterator[T], limit int) *TakeIter[T]

Take instantiates a `TakeIter` that will limit the number of items of its wrapped iterator to a maximum limit.

Example
package main

import (
	"fmt"

	"github.com/BooleanCat/go-functional/iter"
)

func main() {
	iter := iter.Take[int](iter.Count(), 2)
	fmt.Println(iter.Next())
	fmt.Println(iter.Next())
	fmt.Println(iter.Next())
}
Output:

Some(0)
Some(1)
None

func (*TakeIter[T]) Next

func (iter *TakeIter[T]) Next() option.Option[T]

Next implements the Iterator interface for `TakeIter`.

type Tuple

type Tuple[T, U any] struct {
	One T
	Two U
}

type ZipIter

type ZipIter[T, U any] struct {
	// contains filtered or unexported fields
}

ZipIter implements `Zip`. See `Zip`'s documentation.

func Zip

func Zip[T, U any](iter1 Iterator[T], iter2 Iterator[U]) *ZipIter[T, U]

Zip instantiates a `Zip` yield `Tuples` containing the result of a call to each provided Iterator's `Next`. The Iterator is exhausted when one of the provided Iterators is exhausted.

func (*ZipIter[T, U]) Next

func (iter *ZipIter[T, U]) Next() option.Option[Tuple[T, U]]

Next implements the Iterator interface for `ZipIter`.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL