Tango
  • Introduction
  • Getting Started
    • Summary
    • From me, the Developer
    • What is Tango?
    • Where to start?
  • Installation
    • Based on NuGet
    • Manually
  • Fundamentals
    • Introduction
    • Using Pattern Matching
    • Option values
    • Either values
    • From void to Unit
    • Func and Action
    • Chainable operations in a Continuation flow
    • Currying and Partial Application
  • Functional
    • Introduction
    • Currying
    • Partial Application
    • Functional Extensions
    • QuickCast to Delegates
  • Operations
    • Introduction
    • Operations with Booleans
    • Operations with Integers
    • Operations with Decimals
    • Operations with Doubles
    • Operations with Strings
  • Types
    • Introduction
    • Unit
    • Option<T>
    • Either<TLeft, TRight>
    • Continuation<TFail, TSuccess>
  • Modules
    • Introduction
    • Option
      • Apply
      • AsEnumerable
      • Bind
      • Count
      • Exists
      • Filter
      • Fold
      • FoldBack
      • Iterate
      • Map
      • OfNullable
      • ToArray
      • ToList
      • ToNullable
    • Either
      • Exists
      • Iterate
      • Fold
      • FoldBack
      • Map
      • Swap
      • ToTuple
    • Continuation
      • AsContinuation
      • Resolve
      • Reject
      • All
    • Collection
      • Append
      • Choose
      • ChunkBySize
      • Collect
      • CompareWith
      • CountBy
      • Concat
      • Distinct
      • Empty
      • Exists
      • Exists2
      • Filter
      • FindIndex
      • Fold
      • Fold2
      • FoldBack
      • FoldBack2
      • ForAll
      • ForAll2
      • ForAll3
      • Head
      • HeadAndTailEnd
      • Range
      • Generate
      • Initialize
      • Iterate
      • Iterate2
      • IterateIndexed
      • IterateIndexed2
      • Map
      • Map2
      • Map3
      • MapIndexed
      • MapIndexed2
      • MapIndexed3
      • Partition
      • Permute
      • Pick
      • Reduce
      • ReduceBack
      • Replicate
      • Scan
      • Scan2
      • ScanBack
      • ScanBack2
      • Tail
      • TryFind
      • TryPick
      • Unzip
      • Unzip3
      • Zip
      • Zip3
  • Extensions
    • Introduction
    • Enum Extensions
    • EqualityComparer Builder
    • Modules as Extensions
Powered by GitBook
On this page
  • Methods
  • Usage

Was this helpful?

  1. Functional

Currying

PreviousIntroductionNextPartial Application

Last updated 5 years ago

Was this helpful?

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:

 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.

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 .

Tango.Functional.Currying
Fundamentals> Currying and Partial Application