来自一个非常基本的cabal文件
cabal2nix ./. > default.nix
然后是
的shell.nixlet
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和正在运行的cabal配置时,它会抱怨缺少诸如文本之类的包。
如果我将文本包明确地放入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)))
];
}
cabal配置很好,但我希望hs.thispackage.propagatedNativeBuildInputs提供这些包。
可以在
看到非常基本的haskell项目https://github.com/fatlazycat/haskell-nix-helloworld
假设你能以这种方式工作,我错了吗?
由于
答案 0 :(得分:4)
Haskell 库使用propagatedNativeBuildInputs
属性
将构建输入传播到依赖于它们的其他构建。您的
但是,包不是一个库---它是一个可执行文件---所以没有
需要传播构建输入,因此propagatedNativeBuildInputs
是
空。相反,您将找到所需的信息
hs.thispackage.extraBuildInputs
。
一般来说,这类nix-shell
环境的定义
在发布-15.09分支(或nixos-unstable)中变得容易多了,
虽然。只需运行cabal2nix --shell . >shell.nix
即可获得shell.nix
您可以使用nix-build shell.nix
以及for构建的文件
使用nix-shell
进入交互式开发环境。
http://nixos.org/nixpkgs/manual/#users-guide-to-the-haskell-infrastructure有 关于这个主题的更多信息。