class UnionDataGenerator extends DataGenerator<List<A>> {

    @Override
    public DataGenerator<List<A>> apply() {
        UnionDataGenerator nextGen = new UnionDataGenerator(this, position + 1);
        return nextGen.isClosed() ? (DataGenerator<List<A>>) EOS : nextGen;
    }

    private  UnionDataGenerator(List<DataGenerator<A>> sources, double density, int initialSlice);
    private  UnionDataGenerator(UnionDataGenerator<A> generator, int position);

}