Where can I learn about #ifdef?

后端 未结 4 734
旧时难觅i
旧时难觅i 2020-12-29 03:21

I see this used often to make modules compatible with GHC and Hugs, but google is not helping me learn more about it.

What can I put inside the conditional? Can I m

4条回答
  •  无人及你
    2020-12-29 03:44

    In addition to the very useful flags defined by GHC (OS, architecture, etc), when using cabal other flags and macros are defined.

    Check Package Versions

    Here's a use from crypto-api that checks the version of the tagged package being used:

    #if MIN_VERSION_tagged(0,2,0)
    import Data.Proxy
    #endif
    

    Custom CPP Defines Based on Cabal Flags

    You can define CPP symbols dependent on cabal flags. Here's an (unnecessarily complex) example from pureMD5 (from the .cabal file):

     if arch(i386) || arch(x86_64)
       cpp-options: -DFastWordExtract
    

    Inside the .hs module you can then use #ifdef, for example:

    #ifdef FastWordExtract
    getNthWord n b = inlinePerformIO (unsafeUseAsCString b (flip peekElemOff n . castPtr))
    #else
    ... other code ...
    #endif
    

    For more information you can see the Cabal users guide. This page has the "conditional compilation" information you're probably looking for.

提交回复
热议问题