code: func isDynamicType(t Type) bool {
  	if t.T == TupleTy {
  		for _, elem := range t.TupleElems {
  			if isDynamicType(*elem) {
  				return true
  			}
  		}
  		return false
  	}
  	return t.T == StringTy || t.T == BytesTy || t.T == SliceTy || (t.T == ArrayTy && isDynamicType(*t.Elem))
  }
docs: // isDynamicType returns true if the type is dynamic.
  // The following types are called “dynamic”:
  // * bytes
  // * string
  // * T[] for any T
  // * T[k] for any dynamic T and any k >= 0
  // * (T1,...,Tk) if Ti is dynamic for some 1 <= i <= k