summary refs log tree commit diff
path: root/lib
diff options
context:
space:
mode:
authordanbst <abcz2.uprola@gmail.com>2019-01-26 21:43:11 +0200
committerdanbst <abcz2.uprola@gmail.com>2019-01-30 15:26:44 +0200
commitaa2e63ce5ed6e24d73eaefe61489ece46f7460d7 (patch)
tree21ff80f65fee45397e115d332304696096b55f6f /lib
parentf32987d451621a5215a449f8d47fc6f8c05e7ddc (diff)
downloadnixpkgs-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.nix26
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’.