mirror of
https://github.com/NixOS/nix.git
synced 2025-12-01 06:31:00 +01:00
in attribute set pattern matches. This allows defining a function
that takes *at least* the listed attributes, while ignoring
additional attributes. For instance,
{stdenv, fetchurl, fuse, ...}:
stdenv.mkDerivation {
...
};
defines a function that requires an attribute set that contains the
specified attributes but ignores others. The main advantage is that
we can then write in all-packages.nix
aefs = import ../bla/aefs pkgs;
instead of
aefs = import ../bla/aefs {
inherit stdenv fetchurl fuse;
};
This saves a lot of typing (not to mention not having to update
all-packages.nix with purely mechanical changes). It saves as much
typing as the "args: with args;" style, but has the advantage that
the function arguments are properly declared (not implicit in what
the body of the "with" uses).
53 lines
1.1 KiB
XML
53 lines
1.1 KiB
XML
<?xml version='1.0' encoding='utf-8'?>
|
|
<expr>
|
|
<attrs>
|
|
<attr name="a">
|
|
<string value="foo" />
|
|
</attr>
|
|
<attr name="at">
|
|
<function>
|
|
<at>
|
|
<varpat name="args" />
|
|
<attrspat>
|
|
<attr name="x" />
|
|
<attr name="y" />
|
|
<attr name="z" />
|
|
</attrspat>
|
|
</at>
|
|
</function>
|
|
</attr>
|
|
<attr name="b">
|
|
<string value="bar" />
|
|
</attr>
|
|
<attr name="c">
|
|
<string value="foobar" />
|
|
</attr>
|
|
<attr name="ellipsis">
|
|
<function>
|
|
<attrspat>
|
|
<attr name="x" />
|
|
<attr name="y" />
|
|
<attr name="z" />
|
|
<ellipsis />
|
|
</attrspat>
|
|
</function>
|
|
</attr>
|
|
<attr name="f">
|
|
<function>
|
|
<attrspat>
|
|
<attr name="z" />
|
|
<attr name="x" />
|
|
<attr name="y" />
|
|
</attrspat>
|
|
</function>
|
|
</attr>
|
|
<attr name="id">
|
|
<function>
|
|
<varpat name="x" />
|
|
</function>
|
|
</attr>
|
|
<attr name="x">
|
|
<int value="123" />
|
|
</attr>
|
|
</attrs>
|
|
</expr>
|