jbe*_*man 35 haskell ghc c-preprocessor
我看到这经常用于使模块与GHC和Hugs兼容,但谷歌并没有帮助我更多地了解它.
我可以在条件中加入什么?我可以根据正在使用的"基础"版本来制作模块的一部分吗?
编辑3/2017:这是一个很好的资源:https://guide.aelve.com/haskell/cpp-vww0qd72
Tho*_*son 23
除了由GHC(OS,体系结构等)定义的非常有用的标志之外,当使用cabal时,还定义了其他标志和宏.
检查包版本
以下是来自crypto-api的用法,用于检查tagged
正在使用的软件包的版本:
#if MIN_VERSION_tagged(0,2,0)
import Data.Proxy
#endif
Run Code Online (Sandbox Code Playgroud)
自定义CPP基于Cabal标志定义
您可以根据cabal标志定义CPP符号.这是pureMD5(来自.cabal文件)的一个(不必要的复杂)示例:
if arch(i386) || arch(x86_64)
cpp-options: -DFastWordExtract
Run Code Online (Sandbox Code Playgroud)
.hs
然后#ifdef
,您可以使用模块内部,例如:
#ifdef FastWordExtract
getNthWord n b = inlinePerformIO (unsafeUseAsCString b (flip peekElemOff n . castPtr))
#else
... other code ...
#endif
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅Cabal用户指南. 此页面包含您可能正在寻找的"条件编译"信息.
归档时间: |
|
查看次数: |
8500 次 |
最近记录: |