Skip to content

Instantly share code, notes, and snippets.

@odytrice
Created May 12, 2016 08:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save odytrice/2c9c1379843809771d770ecdf1392478 to your computer and use it in GitHub Desktop.
Save odytrice/2c9c1379843809771d770ecdf1392478 to your computer and use it in GitHub Desktop.
Curry Function in C#
public static partial class Prelude
{
/// <summary>
/// Curry the function 'f' provided.
/// You can then partially apply by calling:
///
/// var curried = curry(f);
/// var r = curried(a)(b)
///
/// </summary>
public static Func<T1, Func<T2, R>> curry<T1, T2, R>(Func<T1, T2, R> f) =>
(T1 a) => (T2 b) => f(a, b);
/// <summary>
/// Curry the function 'f' provided.
/// You can then partially apply by calling:
///
/// var curried = curry(f);
/// var r = curried(a)(b)(c)
///
/// </summary>
public static Func<T1, Func<T2, Func<T3, R>>> curry<T1, T2, T3, R>(Func<T1, T2, T3, R> f) =>
(T1 a) => (T2 b) => (T3 c) => f(a, b, c);
/// <summary>
/// Curry the function 'f' provided.
/// You can then partially apply by calling:
///
/// var curried = curry(f);
/// var r = curried(a)(b)(c)(d)
///
/// </summary>
public static Func<T1, Func<T2, Func<T3, Func<T4, R>>>> curry<T1, T2, T3, T4, R>(Func<T1, T2, T3, T4, R> f) =>
(T1 a) => (T2 b) => (T3 c) => (T4 d) => f(a, b, c, d);
/// <summary>
/// Curry the function 'f' provided.
/// You can then partially apply by calling:
///
/// var curried = curry(f);
/// var r = curried(a)(b)(c)(d)(e)
///
/// </summary>
public static Func<T1, Func<T2, Func<T3, Func<T4, Func<T5, R>>>>> curry<T1, T2, T3, T4, T5, R>(Func<T1, T2, T3, T4, T5, R> f) =>
(T1 a) => (T2 b) => (T3 c) => (T4 d) => (T5 e) => f(a, b, c, d, e);
/// <summary>
/// Curry the function 'func' provided.
/// You can then partially apply by calling:
///
/// var curried = curry(f);
/// var r = curried(a)(b)(c)(d)(e)(f)
///
/// </summary>
public static Func<T1, Func<T2, Func<T3, Func<T4, Func<T5, Func<T6, R>>>>>> curry<T1, T2, T3, T4, T5, T6, R>(Func<T1, T2, T3, T4, T5, T6, R> func) =>
(T1 a) => (T2 b) => (T3 c) => (T4 d) => (T5 e) => (T6 f) => func(a, b, c, d, e, f);
/// <summary>
/// Curry the function 'func' provided.
/// You can then partially apply by calling:
///
/// var curried = curry(f);
/// var r = curried(a)(b)(c)(d)(e)(f)(g)
///
/// </summary>
public static Func<T1, Func<T2, Func<T3, Func<T4, Func<T5, Func<T6, Func<T7, R>>>>>>> curry<T1, T2, T3, T4, T5, T6, T7, R>(Func<T1, T2, T3, T4, T5, T6, T7, R> func) =>
(T1 a) => (T2 b) => (T3 c) => (T4 d) => (T5 e) => (T6 f) => (T7 g) => func(a, b, c, d, e, f, g);
/// <summary>
/// Curry the function 'func' provided.
/// You can then partially apply by calling:
///
/// var curried = curry(f);
/// var r = curried(a)(b)(c)(d)(e)(f)(g)(h)
///
/// </summary>
public static Func<T1, Func<T2, Func<T3, Func<T4, Func<T5, Func<T6, Func<T7, Func<T8, R>>>>>>>> curry<T1, T2, T3, T4, T5, T6, T7, T8, R>(Func<T1, T2, T3, T4, T5, T6, T7, T8, R> func) =>
(T1 a) => (T2 b) => (T3 c) => (T4 d) => (T5 e) => (T6 f) => (T7 g) => (T8 h) => func(a, b, c, d, e, f, g, h);
/// <summary>
/// Curry the function 'func' provided.
/// You can then partially apply by calling:
///
/// var curried = curry(f);
/// var r = curried(a)(b)(c)(d)(e)(f)(g)(h)(i)
///
/// </summary>
public static Func<T1, Func<T2, Func<T3, Func<T4, Func<T5, Func<T6, Func<T7, Func<T8, Func<T9, R>>>>>>>>> curry<T1, T2, T3, T4, T5, T6, T7, T8, T9, R>(Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, R> func) =>
(T1 a) => (T2 b) => (T3 c) => (T4 d) => (T5 e) => (T6 f) => (T7 g) => (T8 h) => (T9 i) => func(a, b, c, d, e, f, g, h, i);
/// <summary>
/// Curry the function 'func' provided.
/// You can then partially apply by calling:
///
/// var curried = curry(f);
/// var r = curried(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)
///
/// </summary>
public static Func<T1, Func<T2, Func<T3, Func<T4, Func<T5, Func<T6, Func<T7, Func<T8, Func<T9, Func<T10, R>>>>>>>>>> curry<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, R>(Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, R> func) =>
(T1 a) => (T2 b) => (T3 c) => (T4 d) => (T5 e) => (T6 f) => (T7 g) => (T8 h) => (T9 i) => (T10 j) => func(a, b, c, d, e, f, g, h, i, j);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment