【问题标题】:Can I use the cpp MIN_VERSION conditional for a haskell package?我可以将 cpp MIN_VERSION 条件用于 haskell 包吗?
【发布时间】:2017-11-02 16:34:59
【问题描述】:

我注意到我可以通过像这样添加 CPP 条件来获得与 base 的向后兼容性:

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

但是当我指定包级依赖项时(即:使用类似 #if MIN_VERSION_optparse-applicative(0,13,0) 的东西)时出现错误,我很难找到有关此 GHC 功能的文档。

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

【问题讨论】:

  • MIN_VERSION_optparse-applicative 是无效的 CPP 标识符。试试MIN_VERSION_optparse_applicative
  • ahhhh,我试过了,但这次成功了。看起来我之前也使用了四个版本号,其中宏必须采用三个数字。

标签: haskell compatibility backwards-compatibility


【解决方案1】:

您可以找到记录在 herehere 的宏。

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

{-# LANGUAGE CPP #-}

foo :: String
foo = 
#if MIN_VERSION_optparse_applicative(0,13,0)
  "x"
#else
  "y"
#endif

【讨论】:

  • 谢谢!是的,好像在我使用四个版本号之前也破坏了宏。
猜你喜欢
  • 2021-02-17
  • 2014-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多