[Haskell-cafe] mutually recursive modules
Malcolm.Wallace at cs.york.ac.uk
Fri Sep 24 09:16:38 EDT 2004
Henning Thielemann <iakd0 at clusterf.urz.uni-halle.de> writes:
> > a situation which occurs only very rarely, and for which
> > there is a relatively easy workaround.
> Namely? ...
> It's interesting how other languages solve this problem. In Modula-3 it
> is solved by explicit module interfaces and partial revelation.
Essentially this is how ghc and nhc98 solve it too. You must write
an explicit module interface (the .hi-boot file). This is the
easy workaround. One benefit of these systems over Modula is that
you /only/ need to write explicit interfaces where there is module
recursion - in all non-recursive contexts, the interface generation
> I'm curious how Oberon solves it, because
> it doesn't need explicit interfaces but derives them from the
> implementation files. Probably one can say that Oberon extracts something
> like a .hiboot file from every module file automatically. Why can't GHC
> and Hugs go this way?
The main obstacle is that Haskell systems generally process one
file/module at a time. To extract an interface from each module
first, before further processing, would not only require a second
pass over the source files, but to load all of them simultaneously,
which can be rather space-hungry.
Anyway, as Diatchki, Jones, and Hallgren  have demonstrated,
it is certainly possible to build a Haskell compiler that deals
properly with recursive modules.
 Iavor S. Diatchki, Mark P. Jones, and Thomas Hallgren
"A Formal Specification for the Haskell 98 Module System"
ACM Haskell Workshop, 2002, Baltimore
More information about the Haskell-Cafe