gpt4 book ai didi

haskell - 黑线鳕内的 CPP

转载 作者:行者123 更新时间:2023-12-02 14:07:07 25 4
gpt4 key购买 nike

如果我将整个 block 放入 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不是先于Haddock加工的吗?我的直觉是这是因为在 CPP 阶段之后换行符仍然存在,但这只是直觉

最佳答案

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

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

#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 block 集成到其中。无论如何都不优雅,但应该可以。

关于haskell - 黑线鳕内的 CPP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39087731/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com