Using GHC like a pro
The Glasgow Haskell Compiler is a mighty beast. It's a product of almost three decades of active development and innovation. The lead developers have, for a long time, been Simon Peyton Jones and Simon Marlow. The compiler is written in Haskell itself, though the Runtime System is written in C and C--. GHC is open source and licensed under a permissive three-clause BSD license.
To be able to effectively use the compiler, it's necessary to understand the big steps GHC performs when compiling Haskell code. GHC consists of a front end, back end and something that goes in-between.
The GHC front end performs type-checking and type inference, after which Haskell code is transformed into an intermediate language called Core. Core is like Haskell but syntactically simpler. Much of GHC's magic happens as code transformations from Core to Core: strictness analysis, optimization, rewrite rules, inlining, automatic unboxing of arguments, and so on.
The GHC backend takes Core code and...