package set import "iter" type Set[T comparable] map[T]bool func (s *Set[T]) Add(items ...T) { for _, item := range items { (*s)[item] = true } } func (s Set[T]) Has(item T) bool { return s[item] } func (s *Set[T]) Remove(items ...T) { for _, item := range items { delete(*s, item) } } func (s *Set[T]) Merge(o *Set[T]) { for item := range *o { s.Add(item) } } func (s Set[T]) ToList() []T { list := []T{} for item := range s { list = append(list, item) } return list } func (s Set[T]) Items() iter.Seq[T] { return func(yield func(T) bool) { for item := range s { if !yield(item) { return } } } } func New[T comparable](items ...T) *Set[T] { result := &Set[T]{} for _, item := range items { result.Add(item) } return result }