In the context of higher-order functions, what is partial application?
Partial application is a process of fixing a number of arguments to a function, producing another function of smaller arity (accepting fewer arguments). Unlike currying, which transforms a function to take one argument at a time, partial application fixes some arguments and returns a function that takes the remaining arguments all at once. For example, if we have a function add(a, b, c), we could partially apply it with add(1, 2) to get a new function that only needs the c parameter. This technique is useful for creating specialized functions from more general ones and for composing functions together.