【问题标题】:Haskell: Testing a package against multiple versions of base for HackageHaskell:针对 Hackage 的多个版本的 base 测试包
【发布时间】:2012-01-28 13:52:12
【问题描述】:

我正在尝试将我的第一个包上传到 Hackage(耶!),我收到了这个错误:

依赖“build-depends:base”没有指定版本号的上限。 'base' 包的每个主要版本都会以各种方式更改 API,大多数包都需要一些更改才能使用它进行编译。推荐的做法是在“base”包的版本上指定一个上限。这可确保在发布“基本”包的新主要版本时,您的包将继续构建。如果您不确定要使用什么上限,请使用下一个主要版本。例如,如果您使用 'base' 版本 2 和 3 测试了您的包,则使用 'build-depends: base >= 2 &&

这似乎是一个完全可以接受的拒绝我的包裹的理由。

是否有一个很好的工具可以针对各种版本的base 测试我的包,以便我可以看到界限是什么(而不仅仅是猜测)?我能想到的最好的方法是使用一些 shell 脚本来执行以下操作:

% for v in $BASE_VERSIONS
do
  cabal install base-$v &&\
  cabal configure --enable-tests &&\
  cabal build &&\
  cabal test && echo "$v ok" || echo "$v fail"
done

但我觉得应该有更好的东西。

【问题讨论】:

    标签: haskell base cabal


    【解决方案1】:

    这是一个非常糟糕的主意!您必须升级 base 或 any other packages that come with GHC(标记列中带有 - 的那些),否则一切都会严重崩溃。

    使用较旧版本的 base 进行测试的唯一方法是安装较旧的 GHC 并使用它进行测试。我建议在 7.0.4 和 7.2.2 上尝试一下;现在支持旧版本可能是在浪费时间。

    否则,只需指定base >= VERSION && < 5,其中VERSION 是您的GHC 的版本。或base == 4.* 并希望最好:)

    说真的,base 的 API 并没有真正改变太多,所以你不太可能遇到很多问题。

    为了在不干扰您的主要~/.cabal 存储库的情况下使用各种版本的包测试您的程序,我强烈推荐cabal-dev;像

    $ cabal-dev install 'pkg==VERSION'
    $ cabal-dev install
    $ cabal-dev test
    

    应该这样做。

    顺便说一句,在将包上传到 Hackage 之前,您可以通过 cabal check 收到有关此类问题的警告。

    【讨论】:

      猜你喜欢
      • 2012-02-05
      • 1970-01-01
      • 1970-01-01
      • 2011-03-31
      • 2015-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多