code: func (a *Array) IsCompatible(val interface{}) bool {
  	k := reflect.TypeOf(val).Kind()
  	if k != reflect.Array && k != reflect.Slice {
  		return false
  	}
  	v := reflect.ValueOf(val)
  	for i := 0; i < v.Len(); i++ {
  		compat := (a.ElemType.Type != nil) && a.ElemType.Type.IsCompatible(v.Index(i).Interface())
  		if !compat {
  			return false
  		}
  	}
  	return true
  }
docs: // IsCompatible returns true if val is compatible with p.