为什么cabal会在.cabal / lib中安装已重新安装的软件包

时间:2013-02-05 02:37:55

标签: haskell cabal

我正在尝试使用CircleCI构建一些Haskell项目。 Circle在每次构建后自动缓存/home/ubuntu/.cabal目录,我认为这样可以加快构建速度,但它们似乎只需要很长时间 - 所有跳过的都是下载步骤。

我正在使用的构建说明是

cabal update
cabal install --only-dependencies --enable-tests
cabal configure --enable-tests
cabal build
cabal test

我预计install --only-dependencies步会看到缓存并运行得更快。

可能出现什么问题?

1 个答案:

答案 0 :(得分:4)

几个月前有excellent Reddit discussion个问题。我的回忆是Haskell没有指定的应用程序二进制接口,并且ghc编译器在编译期间进行了大量积极的库间图形缩减。因此,在Haskell应用程序中没有稳定的库安装 - 任何库都可能被拖下来并针对已安装的完整库集重新编译。

这里的底线是缓存.cabal/lib目录不会加速安装。将始终重新编译依赖项。除了使用hsenv的沙盒之外,您最好的方法是在调用cabal install时指定完整的依赖库集。这样,可以提前计算依赖关系,编译应该只进行一次。

Haskell大师,如果我在这里说的任何错误,请随时纠正我。我已经离开了Haskell循环了几个月,我知道最近集体/图书馆问题引起了很多关注。