erlang spec类型

%% Atom indicating the data type that an argument can be converted to.
-type arg_type()  :: 'atom' | 'binary' | 'boolean'.

%% Command line option specification.
-type option_spec() :: {
   Name                         :: atom(),
   Short                        :: char() | undefined,
   Long                         :: string() | undefined,
   ArgSpec                      :: arg_spec(),
   Help                         :: string() | undefined
  }.

-spec parse_and_check([option_spec()], string() | [string()]) ->
                {ok, {[option()], [string()]}} | {error, {Reason :: atom(), Data :: term()}}.
parse_and_check(OptSpecList, CmdLine) ->
    case parse(OptSpecList, CmdLine) of
        {ok, {Opts, _}} = Result ->
            case check(OptSpecList, Opts) of
                ok    -> Result;
                Error -> Error
            end;
        Error ->
            Error
    end.