
import java.util.function.Function;
import java.util.function.IntFunction;

class Test {
    interface GenericOp<A> {
        <B> A apply(IntFunction<B> func1, Function<B, A> func2);
    }

    static <A> GenericOp<A> foo(IntFunction<GenericOp<A>> f) {
        throw new UnsupportedOperationException();
    }

    static <A> GenericOp<A> bar() {
        return foo((int arg) -> new GenericOp<>() {
            @Override
            public <B> A apply(IntFunction<B> func1, Function<B, A> func2) {
                return func2.apply(func1.apply(arg));
            }
        });
    }
} 