Если нужно, то массив можно сделать и дляANY.

Говоришь, что хотел обойтись без приведения типов, но у тебя в примере получается приведениеANYк нужному типу.
Я имел ввиду базовый тип
## Код:
```
ListItem = POINTER TO RECORD END;
```

А дальше либо от него наследоваться
## Код:
```
MyType = POINTER TO RECORD(ListItem)
    ...
END;
```

либо проксировать
## Код:
```
ProxyType = POINTER TO RECORD(ListItem)
    item : MyType;
END;
```

Ну и делать абстрактный List, а от него две реализации: LinkedList (через связный список) и ArrayList (через массив). Вечером попробую сделать свою реализацию и тогда выложу.