code: func (p Primitive) IsCompatible(val interface{}) bool {
  	if p != Boolean && p != Integer && p != Number && p != String && p != DateTime && p != UUID && p != Any {
  		panic("unknown primitive type") // bug
  	}
  	if p == Any {
  		return true
  	}
  	switch val.(type) {
  	case bool:
  		return p == Boolean
  	case int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64:
  		return p == Integer || p == Number
  	case float32, float64:
  		return p == Number
  	case string:
  		if p == String {
  			return true
  		}
  		if p == DateTime {
  			_, err := time.Parse(time.RFC3339, val.(string))
  			return err == nil
  		}
  		if p == UUID {
  			_, err := uuid.FromString(val.(string))
  			return err == nil
  		}
  	}
  	return false
  }
docs: // IsCompatible returns true if val is compatible with p.