anchor.diff:         => {x = "x-foo"; y = "y-bar";}
     */
     mapAttrs = f: set:
  -    listToAttrs (map (attr: nameValuePair attr (f attr (builtins.getAttr attr set))) (attrNames set));
  +    listToAttrs (map (attr: nameValuePair attr (f attr (getAttr attr set))) (attrNames set));
       
   
     /* Like `mapAttrs', except that it recursively applies itself to
  
positive.code: # Operations on attribute sets.
  
  with {
    inherit (builtins) head tail;
    inherit (import ./default.nix) fold;
    inherit (import ./strings.nix) concatStringsSep;
  };
  
negative.code:     in
        if attrPath == [] then e
        else if builtins ? hasAttr && hasAttr attr e
        then attrByPath (tail attrPath) default (getAttr attr e)
        else default;
  
    # keep compatibility for some time. will be removed soon (the name getAttr
    # should only be used for the builtins primop)
    getAttr = a : b : if isString a
      then
        # should have been called from builtins scope. Don't mind. use builtin function
        builtins.getAttr a b
      else  c : builtins.trace "depreceated usage of lib.getAttr!" (attrByPath a b c);
  
  
    getAttrFromPath = attrPath: set:
  