【问题标题】:Doctest with GHC < 8.0: "phase `C pre-processor' failed" with "missing binary operator before token "(""GHC < 8.0 的 Doctest:“阶段‘C 预处理器’失败”,“令牌前缺少二元运算符”(“”
【发布时间】:2018-09-01 01:25:55
【问题描述】:

我对 GHC-7.10.3 及更早版本的文档测试失败感到困惑。完整的错误信息是

Data/ByteString/Builder/HTTP/Chunked.hs:75:0:
     error: missing binary operator before token "("
     #if MIN_VERSION_base(4,8,0)
     ^
doctests: doctests: phase `C pre-processor' failed (exitcode = 1)

使用 GHC >= 8.0,测试按预期工作。在所有情况下,我都使用doctest-0.15.0

编辑:我从https://ghc.haskell.org/trac/ghc/ticket/10970 收集到的是,MIN_VERSION_ 宏最初是由 cabal 定义的,但自 v8.0 起由 GHC 自身生成。看来 cabal v2.2 仍然为 GHC new-build 有效,但 doctest 绕过了 cabal。

有人可以提出一个好的解决方法吗?

【问题讨论】:

  • 由于 doctest 主要用于确保您的 doc cmets 与代码库同步,我只需在您的 cabal 文件中添加一个标志,以允许您禁用旧版本的 doctest。例如,我这样做here

标签: haskell c-preprocessor ghc doctest


【解决方案1】:

对于那些受此打击的人:错误的另一个原因是,如果您在代码中说 #if MIN_VERSION_template_haskell(1,2,3),但忘记在 .cabal 文件中将 template-haskell 添加到包依赖项中,那么您也会收到此错误。

解决方法是将其添加到依赖项中:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-27
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 2014-02-15
    • 1970-01-01
    • 2022-11-13
    • 1970-01-01
    相关资源
    最近更新 更多