首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Haddock中的CPP

Haddock中的CPP
EN

Stack Overflow用户
提问于 2016-08-23 03:58:38
回答 1查看 95关注 0票数 3

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

代码语言:javascript
复制
#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也可以按预期工作。

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

代码语言:javascript
复制
-- | Whether SOME_MACRO is true
-- >>> someMacro
#if SOME_MACRO
-- True
#else
-- False
#endif
someMacro :: Bool
someMacro = macroVal

为什么会这样呢?CPP不是在Haddock之前处理的吗?我有一种直觉,那是因为换行符在CPP阶段之后会继续存在,但这只是一种直觉

EN

回答 1

Stack Overflow用户

发布于 2016-08-23 05:24:41

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

无论如何,我认为可以像这样解决这个问题:

代码语言:javascript
复制
#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块。虽然不是很优雅,但它应该可以。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39087731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档