Currying is a common technique in functional programming. It allows transforming a given function that takes multiple arguments into a sequence of functions, each having a single argument. Each of the resulting functions handles one argument of the original (uncurried) function and returns another function.
In this recipe, we are going to implement an automatic currying mechanism that could be applied to any function taking three parameters.