code: func (h *Hash) IsCompatible(val interface{}) bool {
  	k := reflect.TypeOf(val).Kind()
  	if k != reflect.Map {
  		return false
  	}
  	v := reflect.ValueOf(val)
  	for _, key := range v.MapKeys() {
  		keyCompat := h.KeyType.Type == nil || h.KeyType.Type.IsCompatible(key.Interface())
  		elemCompat := h.ElemType.Type == nil || h.ElemType.Type.IsCompatible(v.MapIndex(key).Interface())
  		if !keyCompat || !elemCompat {
  			return false
  		}
  	}
  	return true
  }
docs: // IsCompatible returns true if val is compatible with p.