func (s *Set[Elem]) Values() []Elem {
	sli := make([]Elem, len(s.m))
	for k := range s.m {
		sli = append(sli, k)
	}
	return sli
}
Values returns the elements in the set s as a slice.
The values will be in an indeterminate order.
package set
type Set[Elem comparable] struct {
	m map[Elem]struct{}
}
func Of[Elem comparable](v ...Elem) Set[Elem] {
	m := map[Elem]struct{}{}
	for _, e := range v {
		m[e] = struct{}{}
	}
	return Set[Elem]{m}
}
func (s *Set[Elem]) Add(v ...Elem) {
	for _, e := range v {
		s.m[e] = struct{}{}
	}
}
func (s *Set[Elem]) AddSet(s2 Set[Elem]) {
	for k := range s2.m {
		s.m[k] = struct{}{}
	}
}
func (s *Set[Elem]) Remove(v ...Elem) {
	for k := range s.m {
		for i := range v {
			if k == v[i] {
				delete(s.m, v[i])
			}
		}
	}
}
func (s *Set[Elem]) RemoveSet(s2 Set[Elem]) {
	for k1 := range s.m {
		for k2 := range s2.m {
			if k1 == k2 {
				delete(s.m, k1)
			}
		}
	}
}
func (s *Set[Elem]) Has(v Elem) bool {
	_, ok := s.m[v]
	return ok
}
func (s *Set[Elem]) HasAny(s2 Set[Elem]) bool {
	for k2 := range s2.m {
		if _, ok := s.m[k2]; ok {
			return true
		}
	}
	return false
}
func (s *Set[Elem]) HasAll(s2 Set[Elem]) bool {
	for k2 := range s2.m {
		if _, ok := s.m[k2]; !ok {
			return false
		}
	}
	return true
}