* Put utility functions like fold in lib/default.nix.

svn path=/nixpkgs/trunk/; revision=6605
wip/yesman
Eelco Dolstra 18 years ago
parent 1e435ca929
commit b8cdbb94f8
  1. 42
      pkgs/lib/default.nix
  2. 15
      pkgs/top-level/all-packages.nix

@ -0,0 +1,42 @@
# Utility functions.
rec {
# "Fold" a binary function `op' between successive elements of
# `list' with `nul' as the starting value, i.e., `fold op nul [x_1
# x_2 ... x_n] == op x_1 (op x_2 ... (op x_n nul))'. (This is
# Haskell's foldr).
fold = op: nul: list:
if list == []
then nul
else op (builtins.head list) (fold op nul (builtins.tail list));
# Concatenate a list of strings.
concatStrings =
fold (x: y: x + y) "";
# Flatten the argument into a single list; that is, nested lists are
# spliced into the top-level lists. E.g., `flatten [1 [2 [3] 4] 5]
# == [1 2 3 4 5]' and `flatten 1 == [1]'.
flatten = x:
if builtins.isList x
then fold (x: y: (flatten x) ++ y) [] x
else [x];
# Return an attribute from nested attribute sets. For instance ["x"
# "y"] applied to some set e returns e.x.y, if it exists. The
# default value is returned otherwise.
getAttr = attrPath: default: e:
let {
attr = builtins.head attrPath;
body =
if attrPath == [] then e
else if builtins ? hasAttr && builtins.hasAttr attr e
then getAttr (builtins.tail attrPath) default (builtins.getAttr attr e)
else default;
};
}

@ -77,19 +77,8 @@ rec {
useFromStdenv = hasIt: it: alternative: if hasIt then it else alternative;
# Return an attribute from nested attribute sets. For instance ["x"
# "y"] applied to some set e returns e.x.y, if it exists. The
# default value is returned otherwise.
getAttr = attrPath: default: e:
let {
attr = builtins.head attrPath;
body =
if attrPath == [] then e
else if builtins ? hasAttr && builtins.hasAttr attr e
then getAttr (builtins.tail attrPath) default (builtins.getAttr attr e)
else default;
};
inherit (import ../lib) getAttr;
# Return an attribute from the Nixpkgs configuration file, or
# a default value if the attribute doesn't exist.
getConfig = attrPath: default: getAttr attrPath default config;

Loading…
Cancel
Save