static class YCombinator { private delegate Func RecursiveFunc(RecursiveFunc r); public static Func Fix(Func, Func> f) => ((RecursiveFunc)(g => f(x => g(g)(x))))(g => f(x => g(g)(x))); }