haskell - 在 NixOS 中使用堆栈 1.8.0 (当前 `stack upgrade --git` )?

标签 haskell haskell-stack nix nixos

如何在 NixOS 上获取 Stack 1.8.*?一般来说,如何确保在 NixOS 上运行的 stack 版本与在非 NixOS 机器上使用 stack update --git 运行的版本等效?

最佳答案

在 Nix 中,如果您想要一个包的特定版本,您可以为其创建一个派生。

推导

要创建 Stack 的派生,您可以获得预构建的 Stack releases 之一使用 nix-prefetch-scripts 包和 stdenv.mkDerivation,如图所示 here .

Stack 1.8 似乎尚未发布,因此您需要从源代码构建它。一种方法是cabal2nix:

cabal2nix --shell 'https://github.com/commercialhaskell/stack.git' > stack.nix

manual中有更多示例

nixpkgs

现在您已经获得了正确版本的软件的派生结果。如果您希望它成为系统默认值,则 override your Nixpkgs .

这是来自 docs 的示例:

{
  packageOverrides = pkgs: rec {
    stack = ./path/to/stack.nix {};
  };
}

更新

我们发现 cabal2nix 生成的派生在堆栈的情况下不起作用,因为 haskellPackages 缺少一些依赖项。

在这里我创建了 gist与在堆栈存储库上运行 stackage2nix 的(稍作调整的)结果。 default.nix 的结果不是单个派生,而是构建堆栈所需的一组包。因此,您的系统的覆盖应该如下所示:

{
  packageOverrides = pkgs: rec {
    stack = (import ./default.nix {}).stack;
  };
}

关于haskell - 在 NixOS 中使用堆栈 1.8.0 (当前 `stack upgrade --git` )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51315498/

相关文章:

haskell - 如何使用 concatMap 将列表理解转换为版本?

haskell - 约束的类型别名不与上下文共享相同的变量绑定(bind)行为

haskell - 使用 Stack 安装 X11 软件包时出现 "X11 libraries not found"错误

coq - 在 Catalina 上通过 nix 安装 mathcomp 8.12/8.13 时出现问题

Docker — 无法连接到 unix :///var/run/docker. sock 上的 Docker 守护进程

linux - 使用 nix-shell 或 nix shell 在 Linux 64 上运行 MacOS sed

haskell - 休斯的斐波那契流

haskell - 从异构列表中取出值

haskell - 使用 postgresql-simple 创建数据库连接时的 GHCI Segfault

haskell - 仅使用堆栈时如何取消隐藏包?