anchor.diff:            name = if path == "" then attr else path + "." + attr;
             test = partition isOption opts;
           in
  -          if test.right == [] then filterOptionSets name test.wrong
  +          if test.right == [] then filterOptionSets name (map delayIf test.wrong)
             else if tail test.right != [] then  throw "Multiple options for '${name}'."
             else { inherit name; } // (head test.right)
         ) opts
  
positive.code:           test = partition isOption opts;
            opt = ({ merge = mergeDefaultOption; apply = id; } // head test.right);
          in
            if test.right == [] then mergeOptionSets noOption name test.wrong
            else if tail test.right != [] then throw "Multiple options for '${name}'."
            else if test.wrong == [] then opt.apply opt.default
            else opt.apply (opt.merge name test.wrong)
        ) opts
     else noOption path opts;
  
  
negative.code:   # function "merge" which expects two arguments.  The attribute named
    # "require" is used to imports option declarations and bindings.
    fixOptionSetsFun = merge: pkgs: opts:
      let
        # ignore all conditions that are on require attributes.
        rmRequireIf = conf:
          let conf2 = delayIf conf; in
          if conf2 ? require then
            conf2 // { require = rmIf conf2.require; }
          else
            conf2;
  
        # call configuration "files" with one of the existing convention.
        optionSet = config: configFun:
          if __isFunction configFun then
            let result = configFun { inherit pkgs config; }; in
          # {pkgs, config, ...}: {..}
            if builtins.isAttrs result then result
          # pkgs: config: {..}
            else configFun pkgs config
          # {..}
          else configFun;
  
        processConfig = config: configFun:
          rmRequireIf (optionSet config configFun);
      in
        config: merge "" (
          uniqFlattenAttr (processConfig) "require" [] (toList opts)
        );
  
    fixOptionSets = merge: pkgs: opts:
      fix (fixOptionSetsFun merge pkgs opts);
  