Quick Post: Currying Func (and variants)

I recently wanted to curry a Func (and variants). Here's how I ended up doing it:

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!

Leave a Reply