about summary refs log tree commit diff
path: root/pkgs/lib
diff options
context:
space:
mode:
authorMichael Raskin <7c6f434c@mail.ru>2008-08-20 06:45:14 +0000
committerMichael Raskin <7c6f434c@mail.ru>2008-08-20 06:45:14 +0000
commit97e15cc2b8e7642ced353cd210169b32c289fd2d (patch)
tree4423da424ee1fc4a60d2a81814e746f1e4152981 /pkgs/lib
parent69e4f1737276b9b66c6b921485f7a9b3cefe0a0f (diff)
Noticed an associativity direction problem
svn path=/nixpkgs/trunk/; revision=12664
Diffstat (limited to 'pkgs/lib')
-rw-r--r--pkgs/lib/default.nix22
1 files changed, 13 insertions, 9 deletions
diff --git a/pkgs/lib/default.nix b/pkgs/lib/default.nix
index a23b7d947efd1..cdf1b2f174f54 100644
--- a/pkgs/lib/default.nix
+++ b/pkgs/lib/default.nix
@@ -32,16 +32,20 @@ rec {
 	else (innerComposedArgs f (y x))));
   composedArgs = f: innerComposedArgs f {};
 
+  defaultMerge = x : y: if builtins.isAttrs y then
+    x // y
+  else 
+    y x;
   sumTwoArgs = f: x: y: 
-    if builtins.isAttrs y then 
-      (f (x // y)) 
-    else 
-      (f (y x));
-  composedArgsAndFun = f : x : (f x) // {
-    meta = {
-      function = composedArgsAndFun (sumTwoArgs f x);
-    };
-  };
+    f (defaultMerge x y);
+  foldArgs = merger: f: init: x: 
+    let arg=(merger init (defaultMerge init x)); in
+      (f arg) // {
+        meta = {
+	  function = foldArgs merger f arg;
+	};
+      };
+  composedArgsAndFun = f: foldArgs (x: y: y) {} f;
 
   # example a = pairMap (x : y : x + y) ["a" "b" "c" "d"];
   # result: ["ab" "cd"]