Breaking a multi-argument function into a chain of single-argument ones.
Currying transforms a function that takes multiple arguments into a sequence of functions that each take exactly one, returning the next function in the chain until all arguments have been supplied. add(a, b, c) becomes add(a)(b)(c) — mechanically different, but produces the same final result. The point isn't to make code look clever; it's to let you supply arguments incrementally and get a reusable, partially-configured function back at each step.
This is easy to confuse with partial application, which is related but not identical: partial application fixes some arguments of a function upfront and returns a new function expecting the rest, without necessarily reducing everything down to one-argument-at-a-time calls. Currying is often used to build specialized functions from general ones — a generic multiply(a, b) curried into multiply(2) gives you a reusable double() function — which is genuinely useful for configuration-heavy code and functional pipelines.
What you'll walk away knowing