static Func <A, B> Y <A, B>(Func <Func <A, B>, Func <A, B> > f) { var r = new RecursiveFunc <Func <A, B> > { o = w => f(_0 => w.o(w)(_0)) }; return(r.o(r)); }
static System.Func <A, B> Y <A, B>(System.Func <System.Func <A, B>, System.Func <A, B> > f) { var r = new RecursiveFunc <System.Func <A, B> >() { o = new System.Func <RecursiveFunc <System.Func <A, B> >, System.Func <A, B> >((RecursiveFunc <System.Func <A, B> > w) => { return(f(new System.Func <A, B>((A x) => { return w.o(w)(x); }))); }) }; return(r.o(r)); }
static Func<A, B> Y<A, B>(Func<Func<A, B>, Func<A, B>> f) { var r = new RecursiveFunc<Func<A, B>> { o = w => f(x => w.o(w)(x)) }; return r.o(r); }