anchor.diff:  -define(IS_OPT_SPEC(Opt), (is_tuple(Opt) andalso (size(Opt) =:= ?OPT_HELP))).
   
   
  -%% @type arg_type() = 'atom' | 'binary' | 'bool' | 'float' | 'integer' | 'string'.
   %% Atom indicating the data type that an argument can be converted to.
   -type arg_type() :: 'atom' | 'binary' | 'boolean' | 'float' | 'integer' | 'string'.
  -%% @type arg_value() = atom() | binary() | bool() | float() | integer() | string().
   %% Data type that an argument can be converted to.
   -type arg_value() :: atom() | binary() | boolean() | float() | integer() | string().
  -%% @type arg_spec() = arg_type() | {arg_type(), arg_value()} | undefined.
   %% Argument specification.
   -type arg_spec() :: arg_type() | {arg_type(), arg_value()} | undefined.
  -%% @type option() = atom() | {atom(), arg_value()}. Option type and optional default argument.
  --type option() :: atom() | {atom(), arg_value()}.
  -%% @type option_spec() = #option{}. Command line option specification.
  +%% Option type and optional default argument.
  +-type simple_option() :: atom().
  +-type compound_option() :: {atom(), arg_value()}.
  +-type option() :: simple_option() | compound_option().
  +%% Command line option specification.
   -type option_spec() :: {
                      Name    :: atom(),
                      Short   :: char() | undefined,
  
positive.code:     OptAcc.
  
  
  -spec convert_option_no_arg(option_spec()) -> option().
  convert_option_no_arg({Name, _Short, _Long, ArgSpec, _Help}) ->
      case ArgSpec of
          % Special case for booleans: if there is no argument we assume
  
negative.code:     {ok, {lists:reverse(append_default_options(OptSpecList, OptAcc)), lists:reverse(ArgAcc)}}.
  
  
  %% @doc Parse a long option, add it to the option accumulator and continue
  %%      parsing the rest of the arguments recursively.
  %%      A long option can have the following syntax:
  %%        --foo      Single option 'foo', no argument
  %%        --foo=bar  Single option 'foo', argument "bar"
  %%        --foo bar  Single option 'foo', argument "bar"
  -spec parse_option_long([option_spec()], [option()], [string()], integer(), [string()], string(), string()) ->
            {ok, {[option()], [string()]}}.
  parse_option_long(OptSpecList, OptAcc, ArgAcc, ArgPos, Args, OptStr, OptArg) ->
      case split_assigned_arg(OptArg) of
          {Long, Arg} ->
  