Немного красивой функциональщины на c#. Функторы каррирования и декаррирования:
public static class Functors
{
public static Func<X, Func<Y, Z>>
Currying<X, Y, Z>(this Func<X, Y, Z> f) => (x) =>
(y) => f(x, y);
public static Func<X, Y, Z> UnCurrying<X, Y, Z>(this Func<X, Func<Y, Z>> f) =>
(x, y) => f(x)(y);
}
Особенно интересно, что в теории множеств "скобочки в степенях" раскрываются также как и в обычной арифметики.
Жаль, что c# не поддерживает переменное число типов-параметров, для обобщения на произвольное количество аргументов.
Жаль, что c# не поддерживает переменное число типов-параметров, для обобщения на произвольное количество аргументов.