As a refresher, currying is an idea borrowed from lambda calculus wherein functions only take single parameters and return functions. Common languages that use the concept are OCaml, Haskell.
Oftentimes, it is helpful to order your function arguments in a natural way such that they can be "partially applied" on the original "multi-parameter" function, returning more specialized helpers. As a natural example:
take_5 = take 5
with the standard Haskell prelude. On the other hand, currying can also simplify notation. For example, consider the following common, generalized idiom:
f x = g y1 ... yn x
where there may be 0 or more yi. Clearly, the function f has a type that conforms to:
x -> z
z is the result type of that applciation of g. In particular, if we simply wrote:
f = g y1 ... yn
then that would still have the type x -> z, as that is the result type of the expression on the rhs. In fact, it precisely returned the function that we wanted our original f to implement.
There is a case to be made for reasoning about this stuff being difficult at first, but as with anything with a learning curve, once you get it -- it's quite neat.