anchor.diff:                 ) args2.flags );
       in removeAttrs
         (mergeAttrsByFuncDefaults ([args] ++ opts ++ [{ passthru = cfgWithDefaults; }]))
  -      ["flags" "cfg" "mergeAttrBy" "fixed" ]; # fixed may be passed as fix argument or such
  +      ["flags" "cfg" "mergeAttrBy" ];
   
   
     # deep, strict equality testing. This should be implemented as primop
  
positive.code:       # now add the function with composed args already applied to the final attrs
      setAttrMerge "passthru" {} (f arg) ( x : x // { function = foldArgs merger f arg; } );
  
    # returns f x // { passthru.fun = y : f (merge x y); } while preserving other passthru names.
    # example: let ex = applyAndFun (x : removeAttrs x ["fixed"])  (mergeOrApply mergeAttr) {name = 6;};
    #              usage1 = ex.passthru.fun { name = 7; };    # result: { name = 7;}
    #              usage2 = ex.passthru.fun (a: a // {name = __add a.name 1; }); # result: { a = 7; }
    # fix usage:
    #              usage3a = ex.passthru.fun (a: a // {name2 = a.fixed.toBePassed; }); # usage3a will fail because toBePassed is not yet given
    #              usage3b usage3a.passthru.fun { toBePassed = "foo";}; # result { name = 7; name2 = "foo"; toBePassed = "foo"; fixed = <this attrs>; }
    applyAndFun = f : merge : x : assert (__isAttrs x || __isFunction x);
      let takeFix = if (__isFunction x) then x else (attr: merge attr x); in
      setAttrMerge "passthru" {} (lib.fix (fixed : f (takeFix {inherit fixed;})))
        ( y : y //
          {
            fun = z : applyAndFun f merge (fixed: merge (takeFix fixed) z);
            funMerge = z : applyAndFun f merge (fixed: let e = takeFix fixed; in merge e (merge e z));
          } );
    mergeOrApply = merge : x : y : if (__isFunction y) then  y x else merge x y;
  
    # rec { # an example of how composedArgsAndFun can be used
    #  a  = composedArgsAndFun (x : x) { a = ["2"]; meta = { d = "bar";}; };
  
negative.code:       && (eqListStrict (lib.attrValues a) (lib.attrValues b))
      else a == b; # FIXME !
  }
  