anchor.diff:      else if all (x: x == toString x) list then concatStrings list
       else throw "Cannot merge values.";
   
  -  mergeTypedOption = typeName: predicate: merge: name: list:
  +  mergeTypedOption = typeName: predicate: merge: list:
       if all predicate list then merge list
       else throw "Expect a ${typeName}.";
   
  
positive.code:   # function of each option to get the result.
    mergeOptionSets = noOption: newMergeOptionSets; # ignore argument
    newMergeOptionSets =
      handleOptionSets {
        export = opt: values:
          opt.apply (
            if values == [] then
              if opt ? default then opt.default
              else throw "Not defined."
            else opt.merge (opt.name) values
          );
        notHandle = throw "Used without option declaration.";
      };
  
negative.code:     (x: if builtins ? isString then builtins.isString x else x + "")
      concatStrings;
  
    mergeOneOption = list:
      if list == [] then abort "This case should never happens."
      else if tail list != [] then throw "Multiple definitions. Only one is allowed for this option."
      else head list;
  