code: func marshalForMethod(typ reflect.Method, val reflect.Value) (string, interface{}, error) {
  	if val.Kind() != reflect.Func {
  		return "", nil, errors.Errorf("expected func, got %v", val.Kind())
  	}
  	name, numIn, numOut := typ.Name, val.Type().NumIn(), val.Type().NumOut()
  	_, blackListed := unmarshallableNames[name]
  	// FIXME: In text/template, (numOut == 2) is marshallable,
  	//        if the type of the second param is error.
  	marshallable := unicode.IsUpper(rune(name[0])) && !blackListed &&
  		numIn == 0 && numOut == 1
  	if !marshallable {
  		return "", nil, nil
  	}
  	result := val.Call(make([]reflect.Value, numIn))
  	intf := result[0].Interface()
  	return name, intf, nil
  }
docs: // marshalForMethod returns the map key and the map value for marshalling the method.
  // It returns ("", nil, nil) for valid but non-marshallable parameter. (e.g. "unexportedFunc()")