anchor.diff:    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;
   
  +  # this can help debug your code as well - designed to not produce thousands of lines
  +  traceWhatis = x : __trace (whatis x) x;
  +  whatis = x : 
  +      if (__isAttrs x) then
  +          if (x ? outPath) then "x is a derivation with name ${x.name}"
  +          else "x is an attr set with attributes ${builtins.toString (__attrNames x)}"
  +      else if (__isFunction x) then "x is a function"
  +      else if (__isList x) then "x is a list, first item is : ${whatis (__head x)}"
  +      else if (x == true || x == false) then builtins.toString x
  +      else "x is propably a string starting, starting characters: ${__substring 0 50 x}..";
  +
  +
     innerClosePropagation = ready: list: if list == [] then ready else
       if (head list) ? propagatedBuildInputs then 
         innerClosePropagation (ready ++ [(head list)]) 
  
positive.code:       then getAttr (tail attrPath) default (builtins.getAttr attr e)
        else default;
  
  
    # Filter a list using a predicate; that is, return a list containing
    # every element from `list' for which `pred' returns true.
  
negative.code:   # 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..)
  
  