建议使用Stack作为全局包管理器的方法

时间:2018-03-27 04:09:26

标签: haskell haskell-stack

我想在全局安装一些Haskell库,例如我的编辑器的Haskell集成使用的hindent。建议的方法是什么?

我认为stack install hindent是正确的方法。但是,我想更新我的软件包,发现无法做到这一点。根据{{​​3}},

  

stack涉及管理项目的本地构建沙箱。它不打算成为全球包管理员。

似乎有一些解决方法,比如在我想要安装的软件包上维护一个带有人工依赖的虚拟项目。这听起来像是一个可怕的黑客,我一直无法找到任何关于应采取何种方法的官方文件。

使用我的系统软件包管理器(Homebrew)安装Haskell软件包不是一个选项,因为它们没有打包。

我本来会打开针对Stack的问题报告,但是贡献指南要求我在the GitHub issue report I found标记下提出问题。

1 个答案:

答案 0 :(得分:6)

好吧,任何项目中的stack install都会安装到~/.local/bin,因此可以全局访问您安装的任何可执行文件。

在没有项目的情况下运行堆栈时使用全局项目,它位于~/.stack/global-project/stack.yaml

如果您希望所有可全局访问的工具具有相同的依赖关系(可能是为了确保ghc版本匹配或其他内容),那么您可以创建一个旨在构建所有这些工具的项目。无论是否是"全球项目"它取决于您。 - 它并没有什么特别之处,如果你在项目中运行堆栈而不是默认设置它。

为了记录"我想要全局安装哪些haskell可执行文件",你可以考虑创建一个像

这样的shell文件
#!/bin/sh
stack install hindent

然后在更改已安装工具的版本时运行此命令。

此外,对于需要匹配ghc版本的intero等工具,您可以执行stack install --copy-compiler-tool intero,当堆栈与该ghc版本一起使用时,它将在PATH上可用。