anchor.diff:  
   -type options() :: list(option()).
   
  --type option() :: {device, pid()} | {timeout, pos_integer()} | {max_length, pos_integer()}.
  +-type option() :: {device, pid()}
  +                | {timeout, pos_integer()}
  +                | {max_length, pos_integer()}
  +                | {authorization, binary() | string()}.
  +
  +-export_type([
  +    options/0,
  +    option/0
  +]).
   
   %% @doc Fetch the data and headers from an url
   -spec fetch(string()|binary(), options()) -> {ok, {string(), list(), pos_integer(), binary()}} | {error, term()}.
  
positive.code:             error_logger:warning_msg("Error fetching url ~p error: ~p", [Url, Error]),
              Error
      end.
  
  normalize_url(Url) ->
      {Protocol, Host, Path, Qs, _Frag} = mochiweb_util:urlsplit(Url),
  
negative.code:         {"Accept-Language", "en,*;q=0"},
          {"User-Agent", httpc_ua(Url)}
      ] ++ case Max of
          undefined -> [];
          _ -> [ {"Range", "bytes=0-"++integer_to_list(Max-1)} ]
      end ++ case proplists:get_value(authorization, Opts) of
          undefined -> [];
          Auth -> [ {"Authorization", to_list(Auth)} ]
      end,
      case fetch_stream(start_stream(Url, Headers, Opts), Max, OutDev) of
          {ok, Result} ->
              maybe_redirect(Result, Url, RedirectCount, Max, OutDev, Opts);
  