```
2021.10.22 07:14:33.963099 [ 3451059 ] {} <Error> Application: DB::Exception: Syntax error (in file ./user_defined/function_a_function.sql): failed at position 39 ('->'): -> ch(2)

$ cat ./user_defined/function_a_function.sql
CREATE FUNCTION a_function AS tuple() -> ch(2)
```
{
    return true;
}
ASTPtr UserDefinedSQLFunctionMatcher::tryToReplaceFunction(const ASTFunction & function)
{
    auto user_defined_function = UserDefinedSQLFunctionFactory::instance().tryGet(function.name);
    if (!user_defined_function)
        return nullptr;
    const auto & function_arguments_list = function.children.at(0)->as<ASTExpressionList>();
    auto & function_arguments = function_arguments_list->children;
    const auto & create_function_query = user_defined_function->as<ASTCreateFunctionQuery>();
    auto & function_core_expression = create_function_query->function_core->children.at(0);
    const auto & identifiers_expression_list = function_core_expression->children.at(0)->children.at(0)->as<ASTExpressionList>();
    const auto & identifiers_raw = identifiers_expression_list->children;
    if (function_arguments.size() != identifiers_raw.size())
        throw Exception(ErrorCodes::UNSUPPORTED_METHOD,
            "Function {} expects {} arguments actual arguments {}",
            create_function_query->function_name,
            identifiers_raw.size(),
            function_arguments.size());
    std::unordered_map<std::string, ASTPtr> identifier_name_to_function_argument;
    for (size_t parameter_index = 0; parameter_index < identifiers_raw.size(); ++parameter_index)
    {
        const auto & identifier = identifiers_raw[parameter_index]->as<ASTIdentifier>();
        const auto & function_argument = function_arguments[parameter_index];
        const auto & identifier_name = identifier->name();
        identifier_name_to_function_argument.emplace(identifier_name, function_argument);
    }
    auto function_body_to_update = function_core_expression->children.at(1)->clone();