package com.firefly.utils.function; /** * @author Pengtao Qiu */ public interface YCombinator { interface RecursiveFunction<F> extends Func1<RecursiveFunction<F>, F> { } static <A, B> Func1<A, B> Y(Func1<Func1<A, B>, Func1<A, B>> f) { RecursiveFunction<Func1<A, B>> r = w -> f.call(x -> w.call(w).call(x)); return r.call(r); } }