[Haskell-cafe] Re: [Haskell] Does GHC support the standard CPP functionalities?

Malcolm Wallace malcolm.wallace at cs.york.ac.uk
Sat Nov 22 05:13:39 EST 2008

[moved to haskell-cafe]

> {-# LANGUAGE CPP #-}
> module Packer where
> #define FLASH_APP_START  1
> #define FLASH_APP_END    2
> #define INSERT_SECTION(x) (#x, (FLASH_##x##_START, FLASH_##x##_END))

The CPP stringization operator # and the token-catenation operator ##  
are ANSI additions over the traditional K+R CPP.  Ghc uses the - 
traditional flag to exclude them, because both # and ## are valid  
Haskell operators, and most people would not want them to be removed  
by the CPP preprocessor.

There are also some other lexical differences between Haskell and C  
which make it a good ides for ghc to use cpp -traditional.

However, if you really want to use ANSI additions, you can switch to  
which does know about the lexical syntax of Haskell.
To use it with ghc, you will need to pass the following extra options:
     ghc -cpp -pgmPcpphs -optP--cpp -optP-ansi

Unfortunately, I'm not certain I can guarantee that the -ansi flag  
will take effect - it depends on whether ghc internally adds the - 
traditional argument before or after it.


More information about the Haskell-Cafe mailing list