anchor.diff:  %% can be risky if more trace messages are generated than any process on
   %% the node could ever handle, despite the precautions taken by this library.
   %% @end
  --spec calls(mfa() | [mfa(),...], max(), options()) -> num_matches().
  +-spec calls(tspec() | [tspec(),...], max(), options()) -> num_matches().
   calls({Mod, Fun, Args}, Max, Opts) ->
       calls([{Mod,Fun,Args}], Max,Opts);
  -calls(MFAs = [_|_], {Max, Time}, Opts) ->
  +calls(TSpecs = [_|_], {Max, Time}, Opts) ->
       Pid = setup(rate_tracer, [Max, Time]),
  -    trace_calls(MFAs, Pid, Opts);
  -calls(MFAs = [_|_], Max, Opts) ->
  +    trace_calls(TSpecs, Pid, Opts);
  +calls(TSpecs = [_|_], Max, Opts) ->
       Pid = setup(count_tracer, [Max]),
  -    trace_calls(MFAs, Pid, Opts).
  +    trace_calls(TSpecs, Pid, Opts).
   
   %%%%%%%%%%%%%%%%%%%%%%%
   %%% PRIVATE EXPORTS %%%
  
positive.code:     ok.
  
  %% @equiv calls({Mod, Fun, Args}, Max, [])
  -spec calls(mfa(), max()) -> num_matches().
  calls({Mod, Fun, Args}, Max) ->
      calls([{Mod,Fun,Args}], Max, []).
  
  
negative.code: %%      of 50 per second at most:
  %%      ``recon_trace:calls({queue, '_', '_'}, {50,1000}, [{pid, Pid}])''</li>
  %%  <li>Print the traces with the function arity instead of literal arguments:
  %%      `recon_trace:calls(TSpec, Max, [{args, arity}])'</li>
  %%  <li>Matching the `filter/2' functions of both `dict' and `lists' modules,
  %%      across new processes only:
  %%      `recon_trace:calls([{dict,filter,2},{lists,filter,2}], 10, [{pid, new]})'</li>
  