Functions in Haskell take no more than one argument. Applying a function to arguments yields another function with arguments. This allows one to create new functions by partial application.

plus :: Int -> Int -> Int
plus x y = x + y
 
-- types are shown for illustrative purposes:
plus 3 :: Int -> Int
(plus 3) 2 :: Int
 
-- as such we can evaluate:
(plus 3) 2 = 5

Multiple arguments can also be passed as one in a tuple but this does not allow partial application of the function:

plusTuple :: (Int, Int) -> Int
plusTuple (x, y) = x + y

We can convert between curried and uncurried functions using the primitive function curry and uncurry respectively:

plus :: Int -> Int -> Int
plus = curry plusTuple