code: func NewFuncType(in []Type, variadic bool, out []Type) *FuncType {
  	inMap := funcTypes
  	if variadic {
  		inMap = variadicFuncTypes
  	}
  
  	outMapI := inMap.Get(in)
  	if outMapI == nil {
  		outMapI = inMap.Put(in, newTypeArrayMap())
  	}
  	outMap := outMapI.(typeArrayMap)
  
  	tI := outMap.Get(out)
  	if tI != nil {
  		return tI.(*FuncType)
  	}
  
  	t := &FuncType{commonType{}, in, variadic, out, ""}
  	outMap.Put(out, t)
  	return t
  }
docs: // Two function types are identical if they have the same number of
  // parameters and result values and if corresponding parameter and
  // result types are identical. All "..." parameters have identical
  // type. Parameter and result names are not required to match.