I recently wanted to curry a Func
public static Func Curry<TCurried, TResult>(this Func<TCurried, TResult> fn, TCurried arg) { return () => fn(arg); } public static Func<T, TResult> Curry<TCurried, T, TResult>(this Func<TCurried, T, TResult> fn, TCurried arg) { return param => fn(arg, param); } public static Func<T1, T2, TResult> Curry<TCurried, T1, T2, TResult>(this Func<TCurried, T1, T2, TResult> fn, TCurried arg) { return (param1, param2) => fn(arg, param1, param2); } |
This allows you do do some fun stuff!