Use of cpp

Alastair Reid alastair at
Tue Jul 13 09:37:21 EDT 2004

> Unfortunately, I've broken portability by doing this and was considering
> some cpp magic to restore portability. But IIRC, the use of cpp is
> discouraged for Haskell library infrastructure.

Using cpp is preferred to breaking portability.
cpp doesn't cause any problem for Hugs (nog NHC, I think).

> Is that so? If so, what should I use instead?
> Is cpphs the way to go?

cpphs aims to be compatible with cpp up to the point where cpp starts doing 
C-specific things like string splicing, interpreting ' as the start of a 
character (and whining if the "character" doesn't end), etc.  So if your code 
works with cpp, it ought to work with cpphs.  In particular, code like the 
following should work fine.

#if GHC
#define FastInt Int#
#define plusInt(x,y) ((x)+#(y))
#define FastInt Int
#define plusInt(x,y) ((x)+(y))

[In practice, I'd leave plusInt curried - I just needed an example of a macro 
with arguments.]

Alastair Reid

More information about the Libraries mailing list