package wildcard;

public class Viz {

    static class AbstractValue<A extends AbstractValue<A>> {}

    public interface Store<B extends Store<B>> {}

    public interface TransferFunction<C extends AbstractValue<C>, D extends Store<D>> {}

    public interface CFGVisualizer<
            E extends AbstractValue<E>, F extends Store<F>, G extends TransferFunction<E, F>> {}

    static class CFAbstractStore<V extends AbstractValue<V>, X extends CFAbstractStore<V, X>>
            implements Store<X> {

        void test(CFGVisualizer<?, X, ?> param) {}
    }
}
