Hello all,

I'm trying to use CPP-defined strings in a Haskell module, like this:

   main :: IO ()
   main = putStrLn FOO

This of course will not work:

   ghc -DFOO="hello world" --make Main.hs -o test

You'll get this error message:

   ./Main.hs:6:16: Not in scope: `hello'
   ./Main.hs:6:22: Not in scope: `world'

Either of these will do what I want:

   ghc -DFOO="\"hello world\"" --make Main.hs -o test

   ghc -DFOO='"hello world"' --make Main.hs -o test  # (that's double quotes inside single quotes)

However, passing the same CPP definition via cabal does not work.

   runhaskell Setup.hs build --ghc-options=-DFOO="\"hello world\""

   runhaskell Setup.hs build --ghc-options=-DFOO='"hello world"'

With either of these commands, I get the same error message as above.  This is understandable, since cabal has to evaluate the string before sending it to GHC, so I lose my escaped quotes.

Any idea how I could change the Haskell module or the command line argument so that I get what I want?  I've tried many combinations of quotes and escaped quotes with no luck.

Thanks,
- Phil