Sad, but very true! And GHC's headers are not very nice in this respect:
panne@jeanluc:~> grep '#define [^ \t][^ \t] ' /usr/lib/ghc-5.03/include/* /usr/lib/ghc-5.03/include/PrimOps.h:#define C 0 /usr/lib/ghc-5.03/include/PrimOps.h:#define R 1 /usr/lib/ghc-5.03/include/PrimOps.h:#define C 1 /usr/lib/ghc-5.03/include/PrimOps.h:#define R 0
Yikes! Fixed, thanks.
panne@jeanluc:~> grep '#define [^ \t][^ \t] ' /usr/lib/ghc-5.03/include/* /usr/lib/ghc-5.03/include/Regs.h:#define R1 (BaseReg->rR1) /usr/lib/ghc-5.03/include/Regs.h:#define R2 (BaseReg->rR2) /usr/lib/ghc-5.03/include/Regs.h:#define F1 (BaseReg->rF1) /usr/lib/ghc-5.03/include/Regs.h:#define F2 (BaseReg->rF2) /usr/lib/ghc-5.03/include/Regs.h:#define F3 (BaseReg->rF3) /usr/lib/ghc-5.03/include/Regs.h:#define F4 (BaseReg->rF4) /usr/lib/ghc-5.03/include/Regs.h:#define D1 (BaseReg->rD1) /usr/lib/ghc-5.03/include/Regs.h:#define D2 (BaseReg->rD2) /usr/lib/ghc-5.03/include/Regs.h:#define L1 (BaseReg->rL1) /usr/lib/ghc-5.03/include/Regs.h:#define Sp (BaseReg->rSp) /usr/lib/ghc-5.03/include/Regs.h:#define Su (BaseReg->rSu) /usr/lib/ghc-5.03/include/Regs.h:#define Hp (BaseReg->rHp)
And so on...
SimonM: What about a "poor man's" namespace, i.e. prefixing every macro, type, etc. with "GHC"/"ghc"? OpenGL, GLUT, GTK, etc. do a similar thing, and although it's a primitive measure, it's very effective.
We really *should* do this, I know. The problem is that it isn't free by a long shot: it'll make .hc files significantly larger, and obfuscate a lot of code. Anyone have any ideas that don't have such a big impact? Cheers, Simon