1package csync
 2
 3import (
 4	"iter"
 5	"sync"
 6)
 7
 8type LazySlice[K any] struct {
 9	inner []K
10	mu    sync.Mutex
11}
12
13func NewLazySlice[K any](load func() []K) *LazySlice[K] {
14	s := &LazySlice[K]{}
15	s.mu.Lock()
16	go func() {
17		s.inner = load()
18		s.mu.Unlock()
19	}()
20	return s
21}
22
23func (s *LazySlice[K]) Iter() iter.Seq[K] {
24	s.mu.Lock()
25	inner := s.inner
26	s.mu.Unlock()
27	return func(yield func(K) bool) {
28		for _, v := range inner {
29			if !yield(v) {
30				return
31			}
32		}
33	}
34}