code: func interpolationFuncValues(vs map[string]ast.Variable) ast.Function {
  	return ast.Function{
  		ArgTypes:   []ast.Type{ast.TypeMap},
  		ReturnType: ast.TypeList,
  		Callback: func(args []interface{}) (interface{}, error) {
  			mapVar := args[0].(map[string]ast.Variable)
  			keys := make([]string, 0)
  
  			for k, _ := range mapVar {
  				keys = append(keys, k)
  			}
  
  			sort.Strings(keys)
  
  			values := make([]string, len(keys))
  			for index, key := range keys {
  				if value, ok := mapVar[key].Value.(string); ok {
  					values[index] = value
  				} else {
  					return "", fmt.Errorf("values(): %q has element with bad type %s",
  						key, mapVar[key].Type)
  				}
  			}
  
  			variable, err := hil.InterfaceToVariable(values)
  			if err != nil {
  				return nil, err
  			}
  
  			return variable.Value, nil
  		},
  	}
  }
docs: // interpolationFuncValues implements the "values" function that yields a list of
  // keys of map types within a Terraform configuration.