anchor.diff:        ) (attrNames set)
       );
   
  -  /* foldAttrs: apply fold functions to values grouped by key. Eg accumulate values as list:
  -     foldAttrs (n: a: [n] ++ a) [] [{ a = 2; } { a = 3; }]
  -     => { a = [ 2 3 ]; }
  +  /* Apply fold functions to values grouped by key.
  +
  +     Example:
  +       foldAttrs (n: a: [n] ++ a) [] [{ a = 2; } { a = 3; }]
  +       => { a = [ 2 3 ]; }
     */
     foldAttrs = op: nul: list_of_attrs:
       fold (n: a:
  
positive.code:     listToAttrs (map (n: nameValuePair n (f n)) names);
  
  
    /* Check whether the argument is a derivation. */
    isDerivation = x: isAttrs x && x ? type && x.type == "derivation";
  
  
    /* Convert a store path to a fake derivation. */
    toDerivation = path:
      let path' = builtins.storePath path; in
      { type = "derivation";
  
negative.code:       else default;
  
    /* Return if an attribute from nested attribute set exists.
  
       Example:
         x = { a = { b = 3; }; }
         hasAttrByPath ["a" "b"] x
         => true
         hasAttrByPath ["z" "z"] x
         => false
  
    */
    hasAttrByPath = attrPath: e:
      let attr = head attrPath;
      in
  