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:       }
      ) (builtins.attrNames defs));
  
    mergeDefaultOption = list:
      if list != [] && tail list == [] then head list
      else if all __isFunction list then x: mergeDefaultOption (map (f: f x) list)
      else if all __isList list then concatLists list
  