diff options
author | danbst <abcz2.uprola@gmail.com> | 2019-01-26 21:43:11 +0200 |
---|---|---|
committer | danbst <abcz2.uprola@gmail.com> | 2019-01-30 15:26:44 +0200 |
commit | aa2e63ce5ed6e24d73eaefe61489ece46f7460d7 (patch) | |
tree | 21ff80f65fee45397e115d332304696096b55f6f /lib | |
parent | f32987d451621a5215a449f8d47fc6f8c05e7ddc (diff) | |
download | nixpkgs-aa2e63ce5ed6e24d73eaefe61489ece46f7460d7.tar nixpkgs-aa2e63ce5ed6e24d73eaefe61489ece46f7460d7.tar.gz nixpkgs-aa2e63ce5ed6e24d73eaefe61489ece46f7460d7.tar.bz2 nixpkgs-aa2e63ce5ed6e24d73eaefe61489ece46f7460d7.tar.lz nixpkgs-aa2e63ce5ed6e24d73eaefe61489ece46f7460d7.tar.xz nixpkgs-aa2e63ce5ed6e24d73eaefe61489ece46f7460d7.tar.zst nixpkgs-aa2e63ce5ed6e24d73eaefe61489ece46f7460d7.zip |
lib/modules.nix: small eval optimization (foldl' + foldl' + attrNames -> foldl' + mapAttrs)
Diffstat (limited to 'lib')
-rw-r--r-- | lib/modules.nix | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/lib/modules.nix b/lib/modules.nix index 9f8e196ee0f..cd031839e64 100644 --- a/lib/modules.nix +++ b/lib/modules.nix @@ -214,23 +214,25 @@ rec { qux = [ "module.hidden=baz,value=bar" "module.hidden=fli,value=gne" ]; } */ - byName = attr: f: modules: foldl' (acc: module: - foldl' (inner: name: - inner // { ${name} = (acc.${name} or []) ++ (f module module.${attr}.${name}); } - ) acc (attrNames module.${attr}) - ) {} modules; + byName = attr: f: modules: + foldl' (acc: module: + acc // (mapAttrs (n: v: + (acc.${n} or []) ++ f module v + ) module.${attr} + ) + ) {} modules; # an attrset 'name' => list of submodules that declare ‘name’. - declsByName = byName "options" - (module: option: [{ inherit (module) file; options = option; }]) - options; + declsByName = byName "options" (module: option: + [{ inherit (module) file; options = option; }] + ) options; # an attrset 'name' => list of submodules that define ‘name’. defnsByName = byName "config" (module: value: - map (config: { inherit (module) file; inherit config; }) (pushDownProperties value) + map (config: { inherit (module) file; inherit config; }) (pushDownProperties value) ) configs; # extract the definitions for each loc - defnsByName' = byName "config" - (module: value: [{ inherit (module) file; inherit value; }]) - configs; + defnsByName' = byName "config" (module: value: + [{ inherit (module) file; inherit value; }] + ) configs; in (flip mapAttrs declsByName (name: decls: # We're descending into attribute ‘name’. |