我正在尝试使用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
步会看到缓存并运行得更快。
可能出现什么问题?
答案 0 :(得分:4)
几个月前有excellent Reddit discussion个问题。我的回忆是Haskell没有指定的应用程序二进制接口,并且ghc
编译器在编译期间进行了大量积极的库间图形缩减。因此,在Haskell应用程序中没有稳定的库安装 - 任何库都可能被拖下来并针对已安装的完整库集重新编译。
这里的底线是缓存.cabal/lib
目录不会加速安装。将始终重新编译依赖项。除了使用hsenv
的沙盒之外,您最好的方法是在调用cabal install
时指定完整的依赖库集。这样,可以提前计算依赖关系,编译应该只进行一次。
Haskell大师,如果我在这里说的任何错误,请随时纠正我。我已经离开了Haskell循环了几个月,我知道最近集体/图书馆问题引起了很多关注。