3

如果我将整个块放在 CPP 条件分支中,我可以根据标志更改黑线鳕:

#if SOME_MACRO
-- | Whether SOME_MACRO is true
-- >>> someMacro
-- True
someMacro :: Bool
someMacro = macroVal
#else
-- | Whether SOME_MACRO is true
-- >>> someMacro
-- False
someMacro :: Bool
someMacro = macroVal
#endif

并且文档看起来像您期望的那样,并且doctest也可以按预期工作。

但对于较大的注释或代码块来说,这是维护的噩梦。另一方面,这似乎不起作用:

-- | Whether SOME_MACRO is true
-- >>> someMacro
#if SOME_MACRO
-- True
#else
-- False
#endif
someMacro :: Bool
someMacro = macroVal

这是为什么?CPP不是在黑线鳕之前处理吗?我的直觉是因为换行符在 CPP 阶段之后仍然存在,但这只是一种直觉

4

1 回答 1

2

如您所说,我不记得是否插入了换行符,或者是否 - 更糟糕的是 -#line还插入了一些指令,这会破坏 Haddock 块。

无论如何,我认为可以按如下方式解决它:

#if SOME_MACRO
#define SOME_MACRO_HK -- True
#else
#define SOME_MACRO_HK -- False
#endif


-- | Whether SOME_MACRO is true
-- >>> someMacro
SOME_MACRO_HK
someMacro :: Bool
someMacro = macroVal

根据需要在宏中插入换行符,可能会将整个 Haddock 块集成到其中。无论如何都不优雅,但它应该这样做。

于 2016-08-22T21:24:40.887 回答