[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.


[1] 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 mailing list