anchor.diff:                  undefined ->
                       throw({error, {invalid_option_arg, OptStr}});
                   _ ->
  -                    parse(OptSpecList, [convert_option_arg(OptSpec, Arg) | OptAcc], ArgAcc, ArgPos, Args)
  +                    parse(OptSpecList, add_option_arg(OptSpec, Arg, OptAcc), ArgAcc, ArgPos, Args)
               end;
           false ->
               throw({error, {invalid_option, OptStr}})
  
positive.code:     true.
  
  
  %% @doc  Show a message on stdout indicating the command line options and
  %%       arguments that are supported by the program.
  -spec usage([option_spec()], string()) -> ok.
  usage(OptSpecList, ProgramName) ->
      io:format("Usage: ~s~s~n~n~s~n",
                [ProgramName, usage_cmd_line(OptSpecList), usage_options(OptSpecList)]).
  
  
  %% @doc  Show a message on stdout indicating the command line options and
  %%       arguments that are supported by the program. The CmdLineTail argument
  %%       is a string that is added to the end of the usage command line.
  -spec usage([option_spec()], string(), string()) -> ok.
  usage(OptSpecList, ProgramName, CmdLineTail) ->
      io:format("Usage: ~s~s ~s~n~n~s~n",
                [ProgramName, usage_cmd_line(OptSpecList), CmdLineTail, usage_options(OptSpecList)]).
  
  
  %% @doc  Show a message on stdout indicating the command line options and
  %%       arguments that are supported by the program. The CmdLineTail and OptionsTail
  %%       arguments are a string that is added to the end of the usage command line
  %%       and a list of tuples that are added to the end of the options' help lines.
  -spec usage([option_spec()], string(), string(), [{string(), string()}]) -> ok.
  usage(OptSpecList, ProgramName, CmdLineTail, OptionsTail) ->
      UsageOptions = lists:foldl(
                       fun ({Prefix, Help}, Acc) ->
                               add_option_help(Prefix, Help, Acc)
                       end, usage_options_reverse(OptSpecList, []), OptionsTail),
      io:format("Usage: ~s~s ~s~n~n~s~n",
                [ProgramName, usage_cmd_line(OptSpecList), CmdLineTail,
                 lists:flatten(lists:reverse(UsageOptions))]).
  
  
negative.code: parse(OptSpecList, OptAcc, ArgAcc, ArgPos, [Arg | Tail]) ->
      case find_non_option_arg(OptSpecList, ArgPos) of
          {value, OptSpec} when ?IS_OPT_SPEC(OptSpec) ->
              parse(OptSpecList, add_option_arg(OptSpec, Arg, OptAcc),
                    ArgAcc, ArgPos + 1, Tail);
          false ->
              parse(OptSpecList, OptAcc, [Arg | ArgAcc], ArgPos, Tail)
  