anchor.diff:      else if all __isAttrs list then mergeAttrs list
       else if all (x: true == x || false == x) list then fold logicalOR false list
       else if all (x: x == toString x) list then concatStrings list
  -    else abort "${name}: Cannot merge values.";
  +    else throw "Cannot merge values.";
   
     mergeTypedOption = typeName: predicate: merge: name: list:
       if all predicate list then merge list
  -    else abort "${name}: Expect a ${typeName}.";
  +    else throw "Expect a ${typeName}.";
   
     mergeEnableOption = mergeTypedOption "boolean"
       (x: true == x || false == x) (fold logicalOR false);
  
positive.code:   innerModifySumArgs = f: x: a: b: if b == null then (f a b) // x else 
  	innerModifySumArgs f x (a // b);
    modifySumArgs = f: x: innerModifySumArgs f x {};
  
    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;
  
negative.code:       # call configuration "files" with one of the existing convention.
        optionSet = config: configFun:
          if __isFunction configFun then
            let result = configFun { inherit pkgs config merge; }; in
          # {pkgs, config, merge, ...}: {..}
            if builtins.isAttrs result then result
          # pkgs: config: {..}
            else builtins.trace "obsolete:" (configFun {} {})
          # {..}
          else configFun;
  
  