func (s *Set) IsEmpty() bool {
	return s.Len() == 0
}
IsEmpty checks for emptiness
package set
import "sync"
type Set struct {
	m map[interface{}]struct{}
	sync.RWMutex
}
func New() *Set {
	return &Set{
		m: make(map[interface{}]struct{}),
	}
}
func (s *Set) Add(item interface{}) {
	s.Lock()
	defer s.Unlock()
	s.m[item] = struct{}{}
}
func (s *Set) Remove(item interface{}) {
	s.Lock()
	defer s.Unlock()
	delete(s.m, item)
}
func (s *Set) Has(item interface{}) bool {
	s.RLock()
	defer s.RUnlock()
	_, ok := s.m[item]
	return ok
}
func (s *Set) Len() int {
	return len(s.List())
}
func (s *Set) Clear() {
	s.Lock()
	defer s.Unlock()
	s.m = make(map[interface{}]struct{})
}