Haskell:针对Hackage的多个版本的基础测试包

ram*_*ion 8 haskell base cabal

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

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

这似乎是拒绝我的包裹的完全可接受的理由.

是否有一个很好的工具来测试我的包对各种版本,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
Run Code Online (Sandbox Code Playgroud)

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

ehi*_*ird 9

这是一个非常糟糕的主意!您不得升级GHC附带的基础或任何其他软件包(-标记列中的软件包),否则一切都会崩溃.

使用旧版本的基础进行测试的唯一方法是安装较旧的GHC并进行测试.我建议在7.0.4和7.2.2上尝试一下; 如今,支持旧版本可能是浪费时间.

如果做不到这一点,只需指定GHC的版本base >= VERSION && < 5在哪里VERSION.或者base == 4.*希望最好的:)

严肃地说,base的API并没有真正改变那么多,所以你不太可能遇到很多问题.

为了在不影响主~/.cabal存储库的情况下使用各种版本的软件包测试您的程序,我强烈建议您使用cabal-dev ; 就像是

$ cabal-dev install 'pkg==VERSION'
$ cabal-dev install
$ cabal-dev test
Run Code Online (Sandbox Code Playgroud)

应该这样做.

顺便cabal check说一下,在将包上传到Hackage之前,你可以做到这样的问题警告.