[Haskell-cafe] Cyclic Inclusions

Isaac Dupree isaacdupree at charter.net
Tue Aug 12 15:40:09 EDT 2008

C.M.Brown wrote:
> I don't really see this as being any kind of real issue at all. Surely all
> GHC needs to do is to concatenate all the modules together, alpha-reduce
> the import/export relations and do a compile/type check over the
> concatenated module.

FWIW, I agree (in principle -- I haven't looked at the GHC 
implementation enough to see whether its internal 
representations could easily do type inference involving 
symbols in multiple modules, and GHC HQ understandably isn't 
interested in implementing it themselves 
http://hackage.haskell.org/trac/ghc/ticket/1409 ).

There is a bit of a question in my mind about what to do 
with .hi/.o files for the combined blob.

There's also a scalability / memory use issue, that is also 
the plug for separate compilation: if you make really big 
modules (whether manually or programmatically), compiling 
them takes lots of memory and time, significantly more total 
time and maximum memory than you need for via separate 
compilation.  I consider this a bug. (Well, I don't know if 
what I said is true -- it's just an excuse that's often 
given for why GHC compiling things together is a bad idea. 
And there are several compile-time performance bugs in 
Trac.)  Admittedly, it's a challenging problem to 
automatically segment a large module so you only need to do 
a little work at once.  Essentially, the module system 
partly has the purpose of telling the compiler how not to 
try to optimize, even if it would be beneficial; and thereby 
you get reasonable compilation times.  This would be 
inexcusable in my mind if the same sort of module 
segmentation didn't also help *humans* understand the 
contents of the modules :-).  I wonder if there can be some 
sort of system with pragmas that accomplishes the same 
purpose of guiding the compiler... probably not for Haskell 
so much as in general


More information about the Haskell-Cafe mailing list