In functional programming, currying represents a function of several arguments as successive one-argument functions. In Haskell, arrows associate to the right:
a -> b -> c means a -> (b -> c). Supplying an argument of type a therefore returns a function of type b -> c, while a function of type (a,b) -> c expects a tuple. Uncurrying converts the first representation to the second. New to topics? Read the docs here!