#ifdef considered harmful

Carl Witty cwitty at newtonlabs.com
Tue Apr 6 15:13:35 EDT 2004

On Tue, 2004-04-06 at 12:05, Wolfgang Jeltsch wrote:
> Look at XML.  You are able to include XML code from other files but the code 
> you import must be a complete XML element.  Similarily, the brances of a 
> Haskell #ifdef should be producable out of a non-terminal, and, more 
> specific, they should be producable out of the same non-terminal.  With these 
> restrictions, one would be able to guarantee syntactical correctness without 
> evaluating the #ifdef conditions, for example.

This doesn't work for one possible (and, I expect, common) use of a
preprocessor -- if one of the branches is syntactically incorrect for
some compilers.  For instance, perhaps one branch uses the GHC unboxed
values extensions for performance, and the other branch uses H98 for

I think that the best approach for dealing with the current libraries
(and the issues of using them under Windows, where you might not have a
convenient CPP) is the same approach others are advocating -- implement
a CPP-compatible preprocessor in Haskell, and ship it with the various

On the other hand, if you want to design a new preprocessor that works
better with Haskell, I highly recommend reading Keith Wansbrough's
unpublished paper, Macros and Preprocessing in Haskell (available from

Carl Witty

More information about the Libraries mailing list