我想在全局安装一些Haskell库,例如 hindent
,它由我的编辑器的Haskell集成使用 . 建议的方法是什么?
我认为 stack install hindent
是正确的方法 . 但是,然后我想更新我的包,发现没有办法做到这一点 . 根据the GitHub issue report I found,
stack涉及管理项目的本地构建沙箱 . 它不打算成为全球包管理员 .
似乎有一些解决方法,例如在我想要安装的软件包上维护一个带有人工依赖性的虚拟项目 . 这听起来像一个可怕的黑客,我一直无法找到任何正式采取的方法的官方文件 .
使用我的系统软件包管理器(Homebrew)安装Haskell软件包不是一个选项,因为它们没有打包 .
我本来会打开针对Stack的问题报告,但是贡献指南要求我在haskell-stack标签下提出问题 .
1 回答
好吧,
stack install
在任何项目中都会安装到~/.local/bin
因此使您安装的任何可执行文件都可以全局访问 .在没有项目的情况下运行堆栈时使用全局项目,它位于
~/.stack/global-project/stack.yaml
.如果您希望所有可全局访问的工具具有相同的依赖关系(可能是为了确保ghc版本匹配或其他),那么您可以创建一个旨在构建所有这些工具的项目 . 这取决于你是否是“全球项目” - 它没有太多特别之处,如果你运行堆栈并且不在项目中,它只是一个默认值 .
为了记录“我想要全局安装什么haskell可执行文件”,您可以考虑创建一个shell文件
每当您更改已安装工具的版本时运行此命令 .
此外,对于像
intero
这样需要匹配ghc版本的工具,您可以执行stack install --copy-compiler-tool intero
,当堆栈与该ghc版本一起使用时,它将在PATH上可用 .