我正在尝试使用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的一部分,但我可以猜出其含义。代码应根据版本导入#endif
或Aeson.Text
。为了以防万一,我查了一下版本:
Aeson.Encode
这足以给黑线鳕带来困难。信息页面被发送到名为$ ghc-pkg list | grep aeson
aeson-0.11.3.0
的文件夹,其中包含一些空的html文件,等待填充docs
库的详细信息。
答案 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 haddock
或stack haddock
一起使用。如果您尝试构建cabal / stack包的文档,建议使用后面的变体。
如果您仍然知道自己在做什么,请使用haddock --optghc=-cpp
。