anchor.diff:    # returns atribute values as a list 
     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) [];
  +
  +  # pick attrs subset_attr_names and apply f 
  +  subsetmap = f : attrs : subset_attr_names : 
  +    listToAttrs (fold ( attr : r : if __hasAttr attr attrs
  +          then r ++ [ (  nv attr ( f (__getAttr attr attrs) ) ) ] else r ) []
  +      subset_attr_names );
   
   # Marc 2nd proposal: (not everything has been tested in detail yet..)
   
  
positive.code:   debugVal = if builtins ? trace then x: (builtins.trace x x) else x: x;
    debugXMLVal = if builtins ? trace then x: (builtins.trace (builtins.toXML x) x) else x: x;
  
    innerClosePropagation = ready: list: if list == [] then ready else
      if (head list) ? propagatedBuildInputs then 
        innerClosePropagation (ready ++ [(head list)]) 
  
negative.code:       then getAttr (tail attrPath) default (builtins.getAttr attr e)
        else default;
  
    # shortcut for getAttr ["name"] default attrs
    maybeAttr = name: default: attrs:
      if (__hasAttr name attrs) then (__getAttr name attrs) else default;
  
  
    # Filter a list using a predicate; that is, return a list containing
    # every element from `list' for which `pred' returns true.
  