Implementing extensible records
simonpj at microsoft.com
Fri Feb 8 12:51:27 EST 2008
It's always nice to hear the sound of someone rolling up their sleeves.
| What hints might you have for me in making my way around GHC's source
| code? I'm not really very familiar with details of any part of the
| compiler at this point, but I have some basic idea of how it's laid
| out overall.
Really all the clues we have are in the Commentary. There is really quite a lot of material on the Wiki. I'm entirely willing to explain more, provided you are willing to then document what you have learned on the Wiki (which in turn means thinking about how to structure it etc). I'll then review what you write.
| Would you recommend working out how to translate record operations
| into operations on existing tuple types, at some point prior to the
| translation into Core, or should I translate things more directly to
I can't begin to answer this without more info on what sort of records you want to implement!
| How is data constructor arity handled at the level of Core?
What does that mean? Look at basicTypes/DataCon.lhs. That exports lots of functions on datacons.
| It would be really nice if there were a flag to emit un-prettyprinted
| Core (or a weakly prettyprinted equivalent of a Show instance for the
| types involved), so I could see the exact representations of things.
That could be something you could add?
| Where should the new typing rules go? The typechecker is huge, and I'm
| not really sure where to begin on that front. TypeRep and Type in the
| types directory seem like good bets for the new type representations
| and additional kind, but I'm much less certain about the typechecking
| itself. Presumably I should work on getting things working at the type
| level before worrying about values at all, since I can test changes in
| the typesystem using undefined values.
Be v cautious about changing TypeRep. It is used a LOT throughout the compiler.
In contrast, changing the source syntax HsSyn is much more localized.
A phone or skype chat might work better
More information about the Cvs-ghc