我可以对haskell包使用cpp MIN_VERSION条件吗?

sti*_*tes 4 compatibility haskell backwards-compatibility

我注意到我可以通过添加CPP条件来向后兼容base,如下所示:

moo :: Moo
moo = Moo
    { happyMoo = Sound "moo"
#if MIN_VERSION_base(4,9,1)
    , upgradedMoo = Sound "moo"
#endif
    , sadMoo = Sound "moo"
    }
Run Code Online (Sandbox Code Playgroud)

但是当我指定包级依赖(即:使用类似的东西#if MIN_VERSION_optparse-applicative(0,13,0))时我得到一个错误,并且我很难找到关于这个GHC功能的文档.

我想知道是否MIN_VERSION_optparse-applicative存在这样的东西,如果没有,hackage维护者如何保持代码向后兼容?

use*_*038 5

您可以在此处此处找到记录的宏.

这里的问题是包名称在这些宏中被破坏了; 特别是,破折号被下划线取代.所以它应该是例如

{-# LANGUAGE CPP #-}

foo :: String
foo = 
#if MIN_VERSION_optparse_applicative(0,13,0)
  "x"
#else
  "y"
#endif
Run Code Online (Sandbox Code Playgroud)