解析 haskell 包含 # 的源文件时出错(c 预处理器)

Error parsing haskell source file containing # (c preprocessor)

在解析包含 #define#if 的 haskell 源文件时,parseFileContentsWithMode 会感到困惑并抛出有关哈希的错误。我试图将 MagicHashCPP 包括在扩展列表中(extns,见下文),但没有用。我真的不能更改源文件,因为它们太多了。

getModule extns filePath program = fromParseResult $ parseFileContentsWithMode mode program
                         where
                                  bangPatternsExt = map parseExtension extns
                                  mode = ParseMode filePath Haskell2010 bangPatternsExt False False 

解析器失败于:

#if __GLASGOW_HASKELL__ >= 612

instance Lift ModName where
  lift = lift . modString

Haskell-src-exts 本身不支持 CPP(在 GitHub 问题跟踪器中没有问题,但是在 http://trac.haskell.org/haskell-src-exts/ticket/27 上有一个旧的跟踪器) .

您可以查看 solution or workarounds for haskell-src-exts parsing modules with CPP failing 的解决方法(使用 cpphs)。

还有一个叫hse-cpp(https://hackage.haskell.org/package/hse-cpp)的包貌似可以给你运行cpphs,不过我没用过,好像不行经常更新。