Using the cpp on the file produces expected results (no # char but value
of arg e put in quotes):
> cpp testPP.hs
# 1 "testPP.hs"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "testPP.hs"
main = do (if 1==2 then return () else putStrLn $ "Error: " ++ "1")
Compiling with ghc and the -E flag gives on the other hand: