code: func interpolationFuncMatchKeys() ast.Function {
  	return ast.Function{
  		ArgTypes:   []ast.Type{ast.TypeList, ast.TypeList, ast.TypeList},
  		ReturnType: ast.TypeList,
  		Callback: func(args []interface{}) (interface{}, error) {
  			output := make([]ast.Variable, 0)
  
  			values, _ := args[0].([]ast.Variable)
  			keys, _ := args[1].([]ast.Variable)
  			searchset, _ := args[2].([]ast.Variable)
  
  			if len(keys) != len(values) {
  				return nil, fmt.Errorf("length of keys and values should be equal")
  			}
  
  			for i, key := range keys {
  				for _, search := range searchset {
  					if res, err := compareSimpleVariables(key, search); err != nil {
  						return nil, err
  					} else if res == true {
  						output = append(output, values[i])
  						break
  					}
  				}
  			}
  			// if searchset is empty, then output is an empty list as well.
  			// if we haven't matched any key, then output is an empty list.
  			return output, nil
  		},
  	}
  }
docs: // for two lists `keys` and `values` of equal length, returns all elements
  // from `values` where the corresponding element from `keys` is in `searchset`.