Я пишу (на самом деле мою первую) довольно большую программу в Haskell и пытаюсь разбить мою программу на модули, чтобы ее было легче поддерживать. В Haskell имена модулей зависят от структуры каталогов. Это прекрасно, пока я не буду внедрять другой слой структуры каталогов для программы. Я приведу очень простой пример ниже:
Скажем, что мы начинаем с программы Haskell со следующей структурой каталогов.
- Имена в квадратных скобках представляют собой каталоги,
- имена в {фигурных скобках} представляют модули,
- имена в (обычные скобки) представляют имена файлов, связанные с модулями
[src]
- (Main.hs) {Main}
- (PRBS.hs) {PRBS}
- [Hardware]
- (DataDef.hs) {Hardware.DataDef}
- (ShiftRegister.hs) {Hardware.ShiftRegister}
Все в порядке. Я могу импортировать все, что хочу, где бы я ни хотел. Однако теперь скажу, что я хочу создать еще один уровень абстракции, например:
[src]
- (Main.hs) {Main}
- [Firmware]
- (PRBS.hs) {Firmware.PRBS}
- [Hardware]
- (DataDef.hs) {Firmware.Hardware.DataDef}
- (ShiftRegister.hs) {Firmware.Hardware.ShiftRegister}
Обратите внимание, что имена всех модулей в аппаратном обеспечении изменились. Теперь я должен изменить имена модулей в каждом файле и во всех других файлах, где файлы импортируются. Три файла, которые я показал в одном примере. Если структура каталогов заканчивается наличием сотен файлов с десятками встроенных каталогов, тогда может оказаться невозможным поддерживать код. Кроме того, если в какой-то момент я хочу скопировать каталог (и его подкаталоги в определенную точку в текущей системе каталогов), мне нужно выяснить все предыдущие каталоги, которые появляются перед ним, и вручную изменить имена модулей в каждом файл.
Так как Haskell используется в нескольких крупных проектах, я очень уверен, что здесь что-то не хватает. Любая помощь в том, чтобы вытащить меня из этой трясины, будет с благодарностью!