What is the main difference between function currying and partial application?
Currying transforms a function to take one argument at a time, returning a new function for each argument until all arguments are supplied and the final result is computed. Partial application, on the other hand, fixes (or 'applies') a number of arguments to a function, producing a new function that takes the remaining arguments. With currying, a 3-argument function becomes a sequence of three single-argument functions. With partial application, you might fix 2 arguments and get back a function that only needs the 3rd argument. While related, they are distinct techniques with different use cases in functional programming.