Вот пример использования.
static Func<T1, Func<T2, Func<T3, TResult>>> Curry<T1, T2, T3, TResult>
(Func<T1, T2, T3, TResult> function)
{
return a => b => c => function(a, b, c);
}
Увы, попытки сформулировать объяснение лучше статьи у меня не получилось. Фактически, вы можете вызвать функцию, которая вернёт вам функцию, одним из параметров которой будет переданный в первую функцию параметр.... В общем, из функции двух аргументов получается 2 функции от 1 аргумента, но вторая функция является производной от первой.
В вашем примере логики немного, но вызов может быть таким:
var result func("someText")("anotherText");
При этом значению первого параметра присвоится второй, но т.к. это строки, то с первым ничего не случится.