在手册中的GNU Hello的nix表达式中:
{ stdenv, fetchurl, perl }: 1
stdenv.mkDerivation { 2
name = "hello-2.1.1"; 3
builder = ./builder.sh; 4
src = fetchurl { 5
url = ftp://ftp.nluug.nl/pub/gnu/hello/hello-2.1.1.tar.gz;
sha256 = "1md7jsfd8pa45z73bz1kszpp01yw6x5ljkjk2hx7wl800any6465";
};
inherit perl; 6
}
您怎么知道stdenv
,fetchurl
和perl
在一个集合中,并将其作为该nix表达式的参数传递?
在Gabriel439/haskell-nix
的{{3}}中,callPackage
的作用是什么?我们怎么知道callPackage
属性路径中存在haskellPackages
?
release0.nix
中的另一个1。我猜测callPackage
的工作方式与import
相同,但是在当前设置也作为参数传递的情况下,这是真的吗?如果是这样,我可以这样更改表达式:
let
pkgs = import <nixpkgs> {};
haskellPkgs = pkgs.haskellPackages;
myPackages = import ./default.nix;
in
myPackages haskellPkgs
对不起,这是一个很大的问题!
答案 0 :(得分:0)
关于您对callPackage
的问题,我认为Luca Bruno(杀手)在他的Nix Pill系列中有一个great explanation。至于为什么我们知道它在那里,callPackage
之所以在那里,是因为有人用这种方式写的。 Nixpkgs documentation中记录了其用法。
要回答最后一个问题:是的,您可以将其替换为建议的表达式,但是您需要对default.nix进行一些更改,因为该函数需要忽略{中不需要的所有属性{1}}。您可以这样添加haskellPkgs
到参数列表中来做到这一点:
...