haskell - 如何在 nix-shell 中使用已安装的 ghc 和堆栈?

标签 haskell ghc haskell-stack nix nix-shell

我已经安装了ghc使用stack构建工具。它编译我的项目。但是当我输入 nix-shell在项目目录中并想要从 nix-shell 编译我的项目我看到这样的错误:

No compiler found, expected minor version match with ghc-8.0.2

可以通过运行 stack setup 来修复此问题命令。但我担心这会安装 ghc再次占用我的机器上更多的空间等等。有没有办法使用已经安装的ghc对于 nix-shell不运行stack setup命令?

最佳答案

我不确定你如何设置你的项目,但可能最简单(但有限)的方法是使用堆栈的 nix integration它将使用 GHC 和来自 nix 的 native 依赖项。

不幸的是,stack nix 集成相当落后。它不使用 nix 来构建您的包,只是为了创建一个具有 GHC 和 native 依赖项的环境。您必须使用 stack 本身来构建项目,并且由于 stack 将运行 cabal,因此它仍然应该与该标志一起使用。 stack nix 集成不会生成具有由堆栈解析的依赖项的 .nix 文件,因此您无法使用 nix-build 构建项目,并且输入 nix-shell< 没有意义。为此,您必须使用 stack2nixstackage2nix 之类的工具。

因此:使用 stack --nix build 进行构建,并且 stack 应该使用 nix 来设置 GHC 和 native 依赖项。

当您准备好处理重要业务(例如自动构建和部署)时,请研究 stack2nixstackage2nix,使用它们将依赖项卡住到 nix 文件,然后使用 nix-buildnix-copy-closure 等进行构建和部署。

关于haskell - 如何在 nix-shell 中使用已安装的 ghc 和堆栈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46194110/

相关文章:

shell - 我可以使用哪些 Haskell 习语在命令行中实现实时查找自动完成?

haskell - hslogger 和重复的日志行

haskell - 如何找出 GHC 的数据类型的内存表示?

haskell - realUnsafePtrEquality# 在没有字段的构造函数上

haskell - 如何找到提供导入的库?

algorithm - 为什么我的 Haskell 代码似乎没有并行运行

haskell - 从堆栈项目生成 Nix 包

math - Haskell 中四舍五入到特定位数

haskell - 和有什么区别。 (点)和 $(美元符号)?

haskell - 如何更改 GHC 编译器错误消息的打印方式?