diff --git a/funcs_aggregation_test.go b/funcs_aggregation_test.go index a299fcc..969cc25 100644 --- a/funcs_aggregation_test.go +++ b/funcs_aggregation_test.go @@ -17,7 +17,7 @@ func TestReduce(t *testing.T) { } func TestScan(t *testing.T) { - iterable := NewSliceIterable([]int{1, 2, 3, 4, 5}) + iterable := NewIterableFromSlice([]int{1, 2, 3, 4, 5}) e := Scan(iterable, 0, func(acc, each int) int { return acc + each }) diff --git a/iterable.go b/iterable.go index 4c27e6f..10e69de 100644 --- a/iterable.go +++ b/iterable.go @@ -5,10 +5,14 @@ import ( "iter" ) -func NewSliceIterable[T any](slice []T) Iterable[T] { +func NewIterableFromSlice[T any](slice []T) Iterable[T] { return &sliceIterable[T]{s: slice} } +func NewIterableFromSeq[TIter goiter.SeqX[T], T any](iter TIter) Iterable[T] { + return &seqIterable[TIter, T]{iter: iter} +} + type Iterable[T any] interface { Iter() iter.Seq[T] } @@ -20,3 +24,11 @@ type sliceIterable[T any] struct { func (si *sliceIterable[T]) Iter() iter.Seq[T] { return goiter.SliceElem(si.s).Seq() } + +type seqIterable[TIter goiter.SeqX[T], T any] struct { + iter TIter +} + +func (si *seqIterable[TIter, T]) Iter() iter.Seq[T] { + return iter.Seq[T](si.iter) +}