带堆栈的 cabal 沙箱

cabal sandbox with stackage

我想将我的全局 cabal 配置指向仅使用 stackage LTS。

在那种情况下,cabal 沙箱是否提供任何价值?

据我所知,应该没有阴谋集团地狱了,因为所有项目都将使用一组保证一起构建的预定包。

是否有任何方法可以预构建所有 stackage LTS 包以加速所有未来的项目构建?

为什么选择沙盒?

我认为使用沙箱仍然有好处:

  • 并不是每个包都在堆栈中,如果你最终使用了一个库或者依赖于一些不属于堆栈的东西,你不能保证它能与你的其他包一起工作。

  • 沙盒除了防止阴谋集团地狱外还有其他用途。它们的另一个主要用途是能够添加本地目录作为包的来源。例如,假设您已经检出本地磁盘上的两个包 ~/code/a~/code/b,并且假设 b 依赖于 a。如果您想检查 b 是否适用于您对 a 所做的一些更改,您可以将本地 a 结帐作为源添加到 b 的 cabal 沙箱。

    cd ~/code/b
    cabal sandbox add-source ~/code/a
    cabal build
    

预构建 LTS 包

如果您设置为预构建所有包,则可以使用以下命令安装 cabal.config 文件中列出的所有包。

cat cabal.config | sed -rn 's/^.* ([^ ]+) ==.*//gp' | xargs cabal install