code: func (ns *Namespace) Uniq(seq interface{}) (interface{}, error) {
  	if seq == nil {
  		return make([]interface{}, 0), nil
  	}
  
  	v := reflect.ValueOf(seq)
  	var slice reflect.Value
  
  	switch v.Kind() {
  	case reflect.Slice:
  		slice = reflect.MakeSlice(v.Type(), 0, 0)
  	case reflect.Array:
  		slice = reflect.MakeSlice(reflect.SliceOf(v.Type().Elem()), 0, 0)
  	default:
  		return nil, errors.Errorf("type %T not supported", seq)
  	}
  
  	seen := make(map[interface{}]bool)
  	for i := 0; i < v.Len(); i++ {
  		ev, _ := indirectInterface(v.Index(i))
  		if !ev.Type().Comparable() {
  			return nil, errors.New("elements must be comparable")
  		}
  		key := normalize(ev)
  		if _, found := seen[key]; !found {
  			slice = reflect.Append(slice, ev)
  			seen[key] = true
  		}
  	}
  
  	return slice.Interface(), nil
  
  }
docs: // Uniq takes in a slice or array and returns a slice with subsequent
  // duplicate elements removed.