是否可以在包含多行字符串文字的 Haskell 代码上使用 CPP 扩展? Haskell 是否还有其他条件编译技术?例如,让我们看这段代码:-- If the next line is uncommented, the program does not compile.-- {-# LANGUAGE CPP #-}msg = "Hello\ \ Wor\ \ld!"main = putStrLn msg如果我取消注释 {-# LANGUAGE CPP #-} ,则 GHC 会用词法错误反驳此代码:[1 of 1] Compiling Main ( cpp-multiline.hs, cpp-multiline.o )cpp-multiline.hs:4:17: lexical error in string/character literal at character 'o'使用 GHC 6.12.1,cpphs 可用。我确认使用 cpphs.compat 包装器和 -pgmP cpphs.compat 选项有帮助,但我想要一个不依赖于自定义 shell 脚本的解决方案。 -pgmP cpphs 不起作用。附言我需要为 GHC = 6.12 使用不同的代码,是否可以不使用预处理器? UPD 。除了 Ganesh 的公认答案之外,我还发现另一种解决方法是将所有条件声明放在一个单独的模块中,{-# LANGUAGE CPP #-} 从而避免在具有多行字符串的模块中使用 CPP。 最佳答案 cpphs 现在有一个 --cpp 选项本身,我认为这使得兼容脚本变得不必要:请参阅 cpphs 1.3 条目 http://haskell.org/cpphs/我认为您需要将 -optP --cpp 传递给 GHC(以及 -pgmP cpphs )以启用此行为。关于haskell - Haskell 中的 CPP 扩展和多行文字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2549167/ 10-13 03:09