[Haskell-cafe] mutually recursive modules
Malcolm Wallace
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? ...
See below.
> 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
is automatic.
> 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 [1] have demonstrated,
it is certainly possible to build a Haskell compiler that deals
properly with recursive modules.
Regards,
Malcolm
[1] Iavor S. Diatchki, Mark P. Jones, and Thomas Hallgren
"A Formal Specification for the Haskell 98 Module System"
ACM Haskell Workshop, 2002, Baltimore
http://www.cse.ogi.edu/~diatchki/hsmod/
More information about the Haskell-Cafe
mailing list