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

How to use already installed ghc with stack inside nix-shell?

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

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

这可以通过 运行 stack setup 命令修复。但是我担心这会在我的机器上再次安装 ghc 并消耗更多的时间 space 等等。有没有一种方法可以将已经安装的 ghc 用于 nix-shell 而无需 运行 stack setup 命令?

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

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

因此:使用 stack --nix build 构建并且堆栈应使用 nix 来设置 GHC 和本机依赖项。

当您准备好进行严肃的业务(如自动构建和部署)时,请查看 stack2nixstackage2nix,使用它们将依赖项冻结到 nix 文件中,然后使用 nix-buildnix-copy-closure 等构建和部署