sclass AutoGrowingList<A> extends RandomAccessAbstractList<A> {
  new L<A> list;
  IF1<Int, A> createEmptyElement; // optional, takes index and produces element
  
  public int size() { ret list.size(); }
  public A get(int i) { ret list.get(i); }
  
  public A set(int i, A a) {
    while (i > size())
      list.add(createEmptyElement?.get(i));
    if (i == size()) {
      add(a);
      null;
    } else
      ret list.set(i, a);
  };
  
  public bool add(A a) { ret list.add(a); }
}