> -- Цитата:
> Какой возни?
Возни с набором кода и его проверкой.

По поводу сортировки добавляем:
## Код:
```
(**
 * @return 1 : Item1 > Item2
 *             0 : Item1 = Item2
 *            -1 : Item1 < Item2
 *)
Comparator = PROCEDURE {DELEGATE} (Item1, Item2 : ListItem) : LONGINT;
```


Добавляем метод в Set
## Код:
```
PROCEDURE SetComparator(comparator : Comparator);
```


И делаем в методе Add проверку
## Код:
```
PROCEDURE Add*(item : ListItem);
BEGIN
    ASSERT(comparator # NIL);
    ...
END Add;
```


Дальше по желанию. Можно сделать реализацию списка на основе чёрно-красных деревьев. Перегружать стандартные методы ещё никто не запрещал.

Сейчас исследую проблему "герметизации" списка через метаинформацию. Т.е. если получили первым элементом Button, то дальше можно добавлять только этот тип или его потомков.