AddTail(x) = Push(x)
RemoveTail() = Pop()
AddHead(x) = Unshift(x)
RemoveHead() = Shift()
GetTail() = Peek()
GetHead() = a
An roList is a linked list while an roArray is a physically contiguous array. The operations are similar but the performance is different. For example, all of the roList operations you listed are O(1), while roArray.Shift and Unshift are O(n). On the other hand, array access with  is O(1) for roArray but O(n) for roList. roList generally uses more memory than roArray.
As commentary, some of the corollaries will be:
- Never loop over big roList with index access (for i=1 to a.count(): ... a ... )
- In fact, don't use roList, except in a rare event that calls for it; e.g. queue (RemoveHead/AddTail) or dequeue
- Don't use shift/unshift with big roArray; to implement stack use push/pop
the GetIndex() method (without an offset) returns the currently indexed item, and advances the pointer to the next item, sort of like Next() in many linked list implementations. That would be the appropriate way to iterate efficiently through an roList.
I only mention it because your original comparison of the ifList and ifArray interfaces didn't mention it, and neither did your commentary, so it may have confused some as to how an roList could be efficiently used.