# Currying

> [`Tango.Functional.Currying`](https://github.com/gabrielschade/Tango/blob/master/Tango/Tango/Functional/Currying.cs)

This *static* class contains several overloads for the Currying operation, where each overload deals with functions that contains different amounts of parameters, with or without a return.

## Methods

| Name  | Parameters                             | Returns                                           | Description                               |
| ----- | -------------------------------------- | ------------------------------------------------- | ----------------------------------------- |
| Curry | Func\<T, T2, TResult> function         | Func\<T, Func\<T2, TResult>>                      | Creates a new curried method of function. |
| Curry | Func\<T, T2, T3, TResult> function     | Func\<T, Func\<T2, Func\<T3,TResult>>>            | Creates a new curried method of function. |
| Curry | Func\<T, T2, T3, T4, TResult> function | Func\<T, Func\<T2, Func\<T3,Func\<T4, TResult>>>> | Creates a new curried method of function. |
| Curry | Action\<T, T2> action                  | Func\<T, Action\<T2>>                             | Creates a new curried method of function. |
| Curry | Action\<T, T2, T3> action              | Func\<T, Func\<T2, Action\<T3>>>                  | Creates a new curried method of function. |
| Curry | Action\<T, T2, T3, T4> action          | Func\<T, Func\<T2, Func\<T3,Action\<T4>>>>        | Creates a new curried method of function. |

## Usage

The overloads available in this class can be used to create new functions from existing functions.

In this example we'll consider an `add` function as a function that performs a sum of two numbers:

```csharp
 Func<int, int, int> add = (value, value2) => value + value2;
```

With the application of the `Curry` function is created a new function as return, this function needs only one of the parameters of the sum as argument and returns a new function. This last function needs the last parameter of the sum and return the result of this operation.

```csharp
Func<int, int, int> add = 
    (value, value2) => value + value2;

Func<int, Func<int, int>> addCurried = Currying.Curry(add);
curriedResult = addCurried(2)(3);
```

The fundamentals about Currying and another examples can be find in [Fundamentals> Currying and Partial Application](https://github.com/gabrielschade/tango/tree/379cc4a38ae47796971eb875ec66e7dc053a9081/Concepts/Currying%20and%20Partial%20Application.html).


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://gabriel-schade-cardoso.gitbook.io/tango/functional/currying.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
