From aa2e63ce5ed6e24d73eaefe61489ece46f7460d7 Mon Sep 17 00:00:00 2001 From: danbst Date: Sat, 26 Jan 2019 21:43:11 +0200 Subject: lib/modules.nix: small eval optimization (foldl' + foldl' + attrNames -> foldl' + mapAttrs) --- lib/modules.nix | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) (limited to 'lib') 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’. -- cgit 1.4.1