
G'day all.
Quoting Felipe Lessa
But I can't say what was the particular method used by GHC.
I don't either, but here's a suggested plan of attack: 1. Write a parser for a suitable subset of Haskell, in a closely related language (e.g. Miranda). 2. Write a front-end that translates the subset of Haskell into Miranda. (Because the languages are so close, this is straightforward, if the subset is chosen well.) (Note: You now effectively have a working implementation of a subset of Haskell, since you can reuse Miranda's typechecker and run-time environment. However, it's written in Miranda.) 3. Now start writing a simple Haskell compiler in the subset of Haskell that you have, using the implementation to do the heavy lifting. You can use other external tools as part of the compilation process, too (e.g. C compiler, Perl script, whatever). Keep going until the simple compiler can compile the implementation. 4. Test. A lot. When you're satisfoed, you have successfully bootstrapped, and can ditch your reliance on Miranda. 5. Implement a larger subset of Haskell. Test, rinse and repeat. Cheers, Andrew Bromage