Interestingly enough, the code fragment below does typecheck:
val L = new ArrayList[Rail[Int]]();
L.add(new Rail[Int](30, 0));
val r : Rail[Int] = L.get(0);
Looking at ArrayList
public operator this(i: int) = a(i);
public def get(i: int): T = a(i);
Note that the operator definition is allowing the return type to be inferred from the type of a, which the get method specifies it explicitly. Operator this(int) on GrowableIndexedMemoryChunk[T](the type of 'a') has an explicit return type of T. So, this certainly looks like a tyepchecker bug, perhaps a bad interaction between constrained types and return type inference.