关于调用nix表达式的争论

时间:2018-06-29 15:35:22

标签: haskell nix

在手册中的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
}

您怎么知道stdenvfetchurlperl在一个集合中,并将其作为该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

对不起,这是一个很大的问题!

1 个答案:

答案 0 :(得分:0)

关于您对callPackage的问题,我认为Luca Bruno(杀手)在他的Nix Pill系列中有一个great explanation。至于为什么我们知道它在那里,callPackage之所以在那里,是因为有人用这种方式写的。 Nixpkgs documentation中记录了其用法。

要回答最后一个问题:是的,您可以将其替换为建议的表达式,但是您需要对default.nix进行一些更改,因为该函数需要忽略{中不需要的所有属性{1}}。您可以这样添加haskellPkgs到参数列表中来做到这一点:

...