Ответ 1
Этот 6-летний билет с запросом на функции содержит достаточное количество обсуждений, которые вы, возможно, уже видели. Суть его в том, что это не совсем простое изменение в отношении GHC. Несколько конкретных вопросов:
-
В настоящее время GHC имеет множество предположений о том, как модули обрабатываются во время компиляции, и существенное изменение этих допущений значительно перевешивает преимущества прозрачной поддержки взаиморекурсивных модулей.
-
Сгруппированные группы модулей означают, что они должны быть скомпилированы вместе, что означает большую перекомпиляцию и неловкость при генерации отдельных файлов
.hi
и.o
. -
Обратная совместимость с существующими сборками, использующими файлы
hs-boot
. -
У вас есть потенциал для взаимно-рекурсивных привязок, которые пересекают границы модулей во взаимно-рекурсивной группе модулей, что приводит к возникновению проблем с чем-либо, что подразумевает неявное обладание уровня модуля (например, дефолт и, возможно, тип экземпляров класса).
-
И, конечно же, потенциал для неизвестных, непредвиденных ошибок, как и все, что изменяет давние предположения в GHC. Даже без значительных изменений в процессе компиляции многие вещи в настоящее время предполагается скомпилировать на основе каждого модуля.
Многие люди хотели бы, чтобы это поддерживалось, но до сих пор никто не производил какую-либо возможную реализацию или не разработал подробный, четко определенный дизайн, который обрабатывает все случаи с неправильным углом сортировки, упомянутые выше.