anchor.diff:        value = f name (catAttrs name sets);
       }) names);
   
  -  /* Implementation note: Common names  appear multiple times in the list of
  +  /* Implementation note: Common names appear multiple times in the list of
        names, hopefully this does not affect the system because the maximal
        laziness avoid computing twice the same expression and listToAttrs does
        not care about duplicated attribute names.
  
positive.code:        }
  
       */
    recursiveUpdate = lhs: rhs:
      recursiveUpdateUntil (path: lhs: rhs:
        !(isAttrs lhs && isAttrs rhs)
      ) lhs rhs;
  
    /* Returns true if the pattern is contained in the set. False otherwise.
  
  
negative.code:     let f = attrPath:
        zipAttrsWith (n: values:
          let here = attrPath ++ [n]; in
          if length values == 1
          || pred here (elemAt values 1) (head values) then
            head values
          else
            f here values
  