anchor.diff:  let
   
     inherit (builtins)
  -    head tail isList stringLength substring lessThan sub listToAttrs;
  +    head tail isList stringLength substring lessThan sub
  +    listToAttrs attrNames hasAttr;
   
   in
   
  
positive.code: 		name (tail (tail list)) checker;
  
    # calls a function (f attr value ) for each record item. returns a list
    mapRecordFlatten = f : r : map (attr: f attr (__getAttr attr r) ) (__attrNames r);
  
    # to be used with listToAttrs (_a_ttribute _v_alue)
    av = attr : value : { inherit attr value; };
  
negative.code:   any = f : l : fold logicalOR false (map f l);
  
    # iterates over a list of attributes collecting the attribute attr if it exists
    catAttrs = attr : l : fold ( s : l : if (hasAttr attr s) then [(builtins.getAttr attr s)] ++ l else l) [] l;
  
    mergeAttrs = fold ( x : y : x // y) {};
  
    flattenAttrs = set : map ( attr : builtins.getAttr attr set) (attrNames set);
    mapIf = cond : f :  fold ( x : l : if (cond x) then [(f x)] ++ l else l) [];
  
  # Marc 2nd proposal: (not everything has been tested in detail yet..)
  