gpt4 book ai didi

haskell - 是否可以让 Haskell 堆栈使用 nix 提供的 Haskell 包?

转载 作者:行者123 更新时间:2023-12-04 13:50:49 25 4
gpt4 key购买 nike

我正在开发一个 Haskell 程序,该程序最终将具有一些非 Haskell 依赖项,我听说堆栈中的 nix 集成是实现此目的的一种方法。但是,我现在想知道是否也可以使用 nix 来安装 Haskell 依赖项,因为我使用的所有库都在 nix 上,而目前我只有 Haskell 依赖项。我尝试制作一个自定义的“shell.nix”文件,该文件描述了我拥有的所有 Haskell 依赖项,如下所示:

with (import <nixpkgs> {});

stdenv.mkDerivation {
name = "simple";
buildInputs = [
haskellPackages.array haskellPackages.base haskellPackages.bound
haskellPackages.containers haskellPackages.deriving-compat
haskellPackages.haskeline haskellPackages.logict haskellPackages.mtl
haskellPackages.text haskellPackages.unification-fd haskellPackages.alex
haskellPackages.happy haskellPackages.BNFC ghc
];
buildTools = [ haskellPackages.alex haskellPackages.happy ];
libraryHaskellDepends = [
haskellPackages.array haskellPackages.base haskellPackages.bound
haskellPackages.containers haskellPackages.deriving-compat
haskellPackages.haskeline haskellPackages.logict haskellPackages.mtl
haskellPackages.text haskellPackages.unification-fd haskellPackages.alex
haskellPackages.happy haskellPackages.BNFC
];
libraryToolDepends = [ haskellPackages.alex haskellPackages.happy haskellPackages.hpack ];
executableHaskellDepends = [
haskellPackages.array haskellPackages.base haskellPackages.bound
haskellPackages.containers haskellPackages.deriving-compat
haskellPackages.haskeline haskellPackages.logict haskellPackages.mtl
haskellPackages.text haskellPackages.unification-fd haskellPackages.alex
haskellPackages.happy haskellPackages.BNFC
];
executableToolDepends = [ haskellPackages.alex haskellPackages.happy ];
testHaskellDepends = [
haskellPackages.array haskellPackages.base haskellPackages.bound
haskellPackages.containers haskellPackages.deriving-compat
haskellPackages.haskeline haskellPackages.logict haskellPackages.mtl
haskellPackages.text haskellPackages.unification-fd haskellPackages.alex
haskellPackages.happy haskellPackages.BNFC
];
testToolDepends = [ haskellPackages.alex haskellPackages.happy ];
}
在 stack.yaml 中,设置
nix:
enable: true
shell-file: shell.nix
但是,当我输入“stack build”时,找不到 alex 等。我可以手动将所有包需求添加到 stack.yaml 文件中(依赖需求已经在 package.yaml/package.cabal 文件中设置)。但是,nixpkgs 上的库版本满足 package.yaml 文件中的依赖项要求,所以我很好奇,是否支持告诉堆栈只使用 nixpkgs 提供的(Haskell)库版本?如果没有,是否还有其他选项可以使用 nixpkgs 提供的依赖项构建 Haskell 项目(只要它们可用)?

最佳答案

这不是问题的真正答案,但它是解决方法的开始,我将发布一个单独的问题。
在 Nix 中,您可以使用 haskellPackages.ghcWithPackages (package-name) , 获取 ghc 以及 ghc 知道的软件包。例如。

{ pkgs ? import <nixpkgs> {}}:
let
# get ghc with libraries bundled
ghc = pkgs.haskellPackages.ghcWithPackages (p:[
p.array
p.base
...]);
...
如果你然后运行 ​​ nix-shell shell.nix然后 cabal build ,它将使用从 Nix 引入的依赖项构建包,一切似乎都如我所愿。有两个异常(exception):alex 和happy。在 v1-build 上,使用了 nix 安装的 alex 和 happy,但在 v2-build 上它们不是(但这超出了这个问题的范围)。

关于haskell - 是否可以让 Haskell 堆栈使用 nix 提供的 Haskell 包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69609504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com