type
  RefSeq[T] = ref seq[T]
  
proc newRefSeq[T]: RefSeq[T] =
  result = new(seq[T])
  result[] = @[]
  
proc add[T](rs: RefSeq[T], t: T) =
  add rs[], t
  
proc delete[T](rs: RefSeq[T], i: int): T =
  delete rs[], i
  
iterator items[T](rs: RefSeq[T]): T =
  for i in items(rs[]):
    yield i
    
# Test

let rs = newRefSeq[int]()
add rs, 1
add rs, 2
add rs, 3

echo delete(rs, 0)

for i in rs:
  echo i