Given a set of functions to chain, this will return a function that will
execute each function in order, passing the result of the previous function
to the next function. The result of the last function will be returned.
Any function that is not the first one is expected to accept a Result type
that matches the return type of the previous function. Subsequent functions
do not have to share Result<> types, but if no type information is provided,
the return type of the previous function will be used.
Given a set of functions to chain, this will return a function that will execute each function in order, passing the result of the previous function to the next function. The result of the last function will be returned.
Any function that is not the first one is expected to accept a Result type that matches the return type of the previous function. Subsequent functions do not have to share Result<> types, but if no type information is provided, the return type of the previous function will be used.