解析 haskell 包含 # 的源文件时出错(c 预处理器)
Error parsing haskell source file containing # (c preprocessor)
在解析包含 #define
和 #if
的 haskell 源文件时,parseFileContentsWithMode
会感到困惑并抛出有关哈希的错误。我试图将 MagicHash
和 CPP
包括在扩展列表中(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,不过我没用过,好像不行经常更新。
在解析包含 #define
和 #if
的 haskell 源文件时,parseFileContentsWithMode
会感到困惑并抛出有关哈希的错误。我试图将 MagicHash
和 CPP
包括在扩展列表中(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,不过我没用过,好像不行经常更新。