Haddock 在 #if #else #endif 子句上崩溃
Haddock breaks down on #if #else #endif clauses
我正在尝试使用黑线鳕为 github 库生成文档。这是我输入的代码:
$ 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)
^
然后我查看了我源代码的相关部分Xhr.hs
第154行:
import Data.Aeson
#if MIN_VERSION_aeson(1,0,0)
import Data.Aeson.Text
#else
import Data.Aeson.Encode
#endif
我不知道 #if
、#else
和 #endif
是 Haskell 的一部分,但我能猜到它的意思。根据版本,代码应导入 Aeson.Text
或 Aeson.Encode
。为了以防万一,我查了一下版本:
$ ghc-pkg list | grep aeson
aeson-0.11.3.0
这足以给黑线鳕带来困难。信息页面被发送到名为 docs
的文件夹,其中包含一些空的 html 文件,等待用 Reflex.Dom
库的详细信息填充。
该代码使用 -cpp
。预处理器指令不是常用 Haskell 语言的一部分。为了正确解析该代码,您需要 specify additional options to Haddock:
2.1. Using literate or pre-processed source
Since Haddock uses GHC internally, both plain and literate Haskell sources are accepted without the need for the user to do anything. To use the C pre-processor, however, the user must pass the the -cpp
option to GHC using --optghc
. [emphasis mine]
但是有两个问题。如果包已公开,您发布的 C 预处理器宏扩展将仅适用于 GHC 8.0 (or later)。但是,无论 GHC 的版本如何,它都应该与 cabal haddock
或 stack haddock
一起工作。顺便说一下,如果您尝试构建 cabal/stack 包的文档,建议使用后一种变体。
如果您仍然知道自己在做什么,请使用 haddock --optghc=-cpp
。
我正在尝试使用黑线鳕为 github 库生成文档。这是我输入的代码:
$ 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)
^
然后我查看了我源代码的相关部分Xhr.hs
第154行:
import Data.Aeson
#if MIN_VERSION_aeson(1,0,0)
import Data.Aeson.Text
#else
import Data.Aeson.Encode
#endif
我不知道 #if
、#else
和 #endif
是 Haskell 的一部分,但我能猜到它的意思。根据版本,代码应导入 Aeson.Text
或 Aeson.Encode
。为了以防万一,我查了一下版本:
$ ghc-pkg list | grep aeson
aeson-0.11.3.0
这足以给黑线鳕带来困难。信息页面被发送到名为 docs
的文件夹,其中包含一些空的 html 文件,等待用 Reflex.Dom
库的详细信息填充。
该代码使用 -cpp
。预处理器指令不是常用 Haskell 语言的一部分。为了正确解析该代码,您需要 specify additional options to Haddock:
2.1. Using literate or pre-processed source
Since Haddock uses GHC internally, both plain and literate Haskell sources are accepted without the need for the user to do anything. To use the C pre-processor, however, the user must pass the the
-cpp
option to GHC using--optghc
. [emphasis mine]
但是有两个问题。如果包已公开,您发布的 C 预处理器宏扩展将仅适用于 GHC 8.0 (or later)。但是,无论 GHC 的版本如何,它都应该与 cabal haddock
或 stack haddock
一起工作。顺便说一下,如果您尝试构建 cabal/stack 包的文档,建议使用后一种变体。
如果您仍然知道自己在做什么,请使用 haddock --optghc=-cpp
。