Haskell поддерживает взаимно рекурсивные let-bindings, что отлично. Haskell не поддерживает взаимно-рекурсивные модули, что иногда бывает ужасным. Я знаю, что GHC его .hs-boot
механизм, но я думаю, что немного взломать.
Насколько я знаю, прозрачная поддержка взаимно-рекурсивных модулей должна быть относительно "простой", и это можно сделать точно так же, как взаимно-рекурсивные let-bindings: вместо того, чтобы брать каждый отдельный модуль в качестве единицы компиляции, я бы взял каждый сильно связанную компоненту графа зависимости модуля как единицы компиляции.
Я что-то упустил? Существует ли нетривиальная причина, почему Haskell не поддерживает взаимно-рекурсивные модули таким образом?