Смотрите: есть объявление прототипа. И мы объявили, что именно этот модуль гарантирует предоставление функционаьности для всех вариантов настройки данного прототипа. По правилам наши алгоритмы, используемые в генериках настолько обобщены (сам принцип подхода!), что нам не важно внутреннее содержание типов-аргументов параметризации. Так, что получается, что мы просто объявляем подобие "настраиваемой фабоики", генерирующей "законченные" типы. И, естественно, что хранить она будет их у себя, в модуле, где генерик объявлен.

Хотя, с другой стороны, ведь система не знает какие типы будут аргументами генериков, как же она будет память распределять для элементов? Как они обошли требование иметь исходники в момент компиляции, что бы "составить мнение" о арактеристиках классов-аргументов параметров? Но дублирования кода  всегда будут! И В памяти ( в десятках модулей ) будет, например, десятки инстанций HackedArray<INTEGER>...
Получается, что - наоборот, инстанцирование (в случае требования сохраннения обероновского подхода к раздельной компиляции) лучше проводить в тех модулях, где объявляются типы-аргументы?
Или, иначе в памяти каждый раз будет перкомпилированный модуль с генериками???