|Haskell Performance Resource|
Use an explicit export list
If you do not have an explicit export list in a module, the compiler must assume that everything in that module will be exported. This disables various useful optimisations:
- If a function is used only once in the current module, and not exported, there is no penalty for inlining the function at its single use point.
- If a function is not used at all, and not exported, its definition can be discarded.
- The compiler has more flexibility regarding calling conventions and the like for functions that are not visible beyond the current compilation unit.
Manual whole program compilation
For compilers with separate module compilation, a whole-program compilation and optimization can be achieved semi-automatically by merging a bundle of modules using Haskell All-In-One.