从一个非常基本的阴谋集团文件
cabal2nix ./. > default.nix 然后是一个shell.nix
let
pkgs = import <nixpkgs> {};
haskellPackages = pkgs.haskellPackages_ghc784.override {
extension = self: super: {
thispackage = self.callPackage ./default.nix {};
};
};
in pkgs.myEnvFun {
name = haskellPackages.thispackage.name;
buildInputs = [
(haskellPackages.ghcWithPackages (hs: ([
hs.cabalInstall
] ++ hs.thispackage.propagatedNativeBuildInputs)))
];
}在nix-shell中,当运行阴谋配置时,它会抱怨缺少包,比如文本。
如果我将文本包显式地放入shell.nix中,如
let
pkgs = import <nixpkgs> {};
haskellPackages = pkgs.haskellPackages_ghc784.override {
extension = self: super: {
thispackage = self.callPackage ./default.nix {};
};
};
in pkgs.myEnvFun {
name = haskellPackages.thispackage.name;
buildInputs = [
(haskellPackages.ghcWithPackages (hs: ([
hs.cabalInstall
hs.text
] ++ hs.thispackage.propagatedNativeBuildInputs)))
];
} 阴谋配置很好,但我希望hs.thispackage.propagatedNativeBuildInputs提供这些包。
非常基本的haskell项目可以在
https://github.com/fatlazycat/haskell-nix-helloworld
假设你可以这样工作,我错了吗?
谢谢
发布于 2015-11-19 15:16:54
Haskell库使用propagatedNativeBuildInputs属性将它们的构建输入传播到依赖它们的其他构建。但是,您的包不是一个库--它是一个可执行文件--所以不需要传播构建输入,因此propagatedNativeBuildInputs是空的。相反,您将在hs.thispackage.extraBuildInputs中找到所需的信息。
一般来说,这类nix-shell环境的定义在发布版15.09分支(或nixos-不稳定)中变得容易得多。只需运行cabal2nix --shell . >shell.nix,就可以得到一个shell.nix文件,您可以使用该文件构建nix-build shell.nix,也可以使用nix-shell进入交互式开发环境。
http://nixos.org/nixpkgs/manual/#users-guide-to-the-haskell-infrastructure有更多关于这个主题的信息。
https://stackoverflow.com/questions/28202394
复制相似问题