how to break up a large module?

Simon Marlow
Fri, 30 May 2003 13:41:18 +0100

> I recently spent a couple of hours breaking up a large module=20
> (2.5k lines)
> into several smaller modules.  When I finally got it working,=20
> I found that
> my program took about 60% longer to run.  This was running ghc with -O
> optimization.
> Any suggestions how to go about breaking up a module in such=20
> a way that it
> doesn't slow things down? Do I just have to go adding INLINE=20
> directives to
> all my functions? Or is there some other trick I could use?

Be careful about accidental overloading: GHC will specialise if it can
see the uses of a function within a single module, but not when the
function is in another module.  Put type signatures on everything, and
consider using SPECIALISE pragmas to eliminate overloading.

Be careful with exports.  Prune export lists to just those functions
which need to be exported.