anchor.diff:         catAttrs "a" [{a = 1;} {b = 0;} {a = 2;}]
          => [1 2]
     */
  -  catAttrs = attr: l: fold (s: l: if hasAttr attr s then [(builtins.getAttr attr s)] ++ l else l) [] l;
  +  catAttrs = attr: l: fold (s: l: if hasAttr attr s then [(getAttr attr s)] ++ l else l) [] l;
   
   
     /* Utility function that creates a {name, value} pair as expected by
  
positive.code:     in
        if attrPath == [] then e
        else if builtins ? hasAttr && hasAttr attr e
        then attrByPath (tail attrPath) default (builtins.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 : c : builtins.trace "depreceated usage of lib.getAttr!"
      (attrByPath a b c);
  
  
    getAttrFromPath = attrPath: set:
  
negative.code: # Operations on attribute sets.
  
  with {
    inherit (builtins) head tail isString;
    inherit (import ./default.nix) fold;
    inherit (import ./strings.nix) concatStringsSep;
  };
  