Haddock打破#if #else #endif条款

时间:2017-03-23 21:25:46

标签: haskell documentation haddock reflex

我正在尝试使用haddock为github库生成文档。这是我输入的代码:

private val handleDealOperation: (DealOperation) -> State.Change = {
    operation ->
    val temp = when (operation) {

    }
    temp
}

然后我查看了源代码$ find -name '*.hs' | xargs haddock --html -o docs src/Reflex/Dom/Xhr.hs:154:0: error: missing binary operator before token "(" #if MIN_VERSION_aeson(1,0,0) ^ 第154行的相关部分:

Xhr.hs

我不知道import Data.Aeson #if MIN_VERSION_aeson(1,0,0) import Data.Aeson.Text #else import Data.Aeson.Encode #endif #if#else是Haskell的一部分,但我可以猜出其含义。代码应根据版本导入#endifAeson.Text。为了以防万一,我查了一下版本:

Aeson.Encode

这足以给黑线鳕带来困难。信息页面被发送到名为$ ghc-pkg list | grep aeson aeson-0.11.3.0 的文件夹,其中包含一些空的html文件,等待填充docs库的详细信息。

1 个答案:

答案 0 :(得分:3)

该代码使用-cpp。预处理程序指令不是通常的Haskell语言的一部分。为了正确解析该代码,您需要specify additional options to Haddock

  

2.1。使用识字或预处理源

     

由于Haddock在内部使用GHC,因此无需用户做任何事情即可接受普通和有文化的Haskell源。 但是,要使用C预处理器,用户必须使用-cpp--optghc选项传递给GHC。 [强调我的]

但是有两个问题。如果包暴露,您发布的C预处理器宏扩展仅适用于GHC 8.0 (or later)。但是,无论GHC的版本如何,它都应与cabal haddockstack haddock一起使用。如果您尝试构建cabal / stack包的文档,建议使用后面的变体。

如果您仍然知道自己在做什么,请使用haddock --optghc=-cpp