anchor.diff:            # Remove undefined values that are coming from evalIf.
             optValues = evalProperties defs;
           in
  -          if decls == [] then handleOptionSets optionHandler name optAttrs
  +          if decls == [] then recurseInto name optAttrs
             else lib.addErrorContext "while evaluating the option ${name}:" (
  -            if tail decls != [] then throw "Multiple options."
  -            else export opt optValues
  +            export opt optValues
             )
         ) opts
      else lib.addErrorContext "while evaluating ${path}:" (notHandle opts);
  
positive.code: rec {
  
  
    mkOption = attrs: attrs // {_type = "option";};
  
    hasType = x: isAttrs x && x ? _type;
    typeOf = x: if hasType x then x._type else "";
  
    isOption = attrs: (typeOf attrs) == "option";
  
    addDefaultOptionValues = defs: opts: opts //
      builtins.listToAttrs (map (defName:
        { name = defName;
  
negative.code:           test = partition isOption opts;
            decls = test.right; defs = test.wrong;
  
            # Make the option declaration more user-friendly by adding default
            # settings and some verifications based on the declaration content
            # (like type correctness).
            opt = addOptionMakeUp
              { inherit name recurseInto; }
              (mergeOptionDecls decls);
  
            # Return the list of option sets.
            optAttrs = map delayProperties defs;
  