如果我将整个块放在 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 阶段之后仍然存在,但这只是一种直觉