Аргументы при вызове выражения nix
В выражении nix для GNU Hello в руководстве, которое является следующим:
{ 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?
Также в этом выпуске 0.nix от Gabriel439/haskell-nix
что значит callPackage
делать? И как мы узнаем, что callPackage
существуют в haskellPackages
атрибут пути?
Еще 1 из вышеперечисленного release0.nix
, я догадываюсь callPackage
работает так же, как import
но с текущим набором, также передаваемым в качестве аргумента, это правда? Если так, я могу изменить выражение с этим:
let
pkgs = import <nixpkgs> {};
haskellPkgs = pkgs.haskellPackages;
myPackages = import ./default.nix;
in
myPackages haskellPkgs
Извините, это много вопросов!
1 ответ
На ваш вопрос о callPackage
Я думаю, что у Луки Бруно (летального человека) есть отличное объяснение в его серии "Nix Pill". Относительно того, почему мы знаем, что это там, callPackage
потому что кто-то так написал. Его использование задокументировано в документации Nixpkgs.
Чтобы ответить на ваш последний вопрос: да, вы можете заменить его предложенным выражением, но вам нужно внести небольшое изменение в default.nix, потому что функция должна игнорировать все атрибуты, в которых она не нуждается. haskellPkgs
, Вы можете сделать это, добавив ...
в список аргументов, как это:
{ mkDerivation, base, stdenv, ... }: