code: func (e Equalities) AddFunc(eqFunc interface{}) error {
  	fv := reflect.ValueOf(eqFunc)
  	ft := fv.Type()
  	if ft.Kind() != reflect.Func {
  		return fmt.Errorf("expected func, got: %v", ft)
  	}
  	if ft.NumIn() != 2 {
  		return fmt.Errorf("expected two 'in' params, got: %v", ft)
  	}
  	if ft.NumOut() != 1 {
  		return fmt.Errorf("expected one 'out' param, got: %v", ft)
  	}
  	if ft.In(0) != ft.In(1) {
  		return fmt.Errorf("expected arg 1 and 2 to have same type, but got %v", ft)
  	}
  	var forReturnType bool
  	boolType := reflect.TypeOf(forReturnType)
  	if ft.Out(0) != boolType {
  		return fmt.Errorf("expected bool return, got: %v", ft)
  	}
  	e[ft.In(0)] = fv
  	return nil
  }
docs: // AddFunc uses func as an equality function: it must take
  // two parameters of the same type, and return a boolean.