# Combining Currying and Composition

Learn how to use currying and composition together for functions that take multiple arguments.

## We'll cover the following

## Function with one parameter value

Composing is easy when we have a scenario like this:

- Function
`ONE`

accepts a parameter of type`A`

and returns a value of type`B`

. - Function
`TWO`

accepts a parameter of type`B`

and returns a value of type`C`

. - Function
`THREE`

accepts a parameter of type`C`

and returns a value of type`D`

.

Note how function `TWO`

needs a value that function `ONE`

can provide, while function `THREE`

needs a value produced by function `TWO`

. This means that these functions can be composed. We run function `ONE`

with the value of type `A`

, which returns a value of type `B`

. Next up is function `TWO`

, which receives the value of type `B`

and returns a value of type `C`

. This value of type `C`

is passed to function `THREE`

. Finally, this gives us our result, a value of type `D`

.

Note:In a`Haskell`

or`F#`

type of notation, the signatures of the functions above will be as follows:`ONE :: A -> B TWO :: B -> C THREE :: C -> D COMBINED :: A -> D`

## Function with multiple parameter values

We saw that if the output of one function matches the input of the other, we can combine them. However, what if function `TWO`

needs multiple arguments? Let’s look at an example.

Get hands-on with 1200+ tech skills courses.