interface Eff { B f(A a); } class Disfunction { public static Eff vary(final Eff super A, ? extends B> f) { return a -> f.f(a); } public static Eff, Eff> vary() { return Disfunction::vary; } }