anchor.diff:  %%      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(MFA, Max, [{args, arity}])'</li>
  +%%      `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>
  
positive.code:     end.
  
  %% Sets the traces in action
  trace_calls(MFAs, Pid, Opts) ->
      {PidSpecs, TraceOpts, MatchOpts} = validate_opts(Opts),
      Matches = [begin
                  {Arity, Spec} = validate_mfa(Mod, Fun, Args),
                  erlang:trace_pattern({Mod, Fun, Arity}, Spec, MatchOpts)
                 end || {Mod, Fun, Args} <- MFAs],
      [erlang:trace(PidSpec, true, [call, {tracer, Pid} | TraceOpts])
       || PidSpec <- PidSpecs],
      lists:sum(Matches).
  
negative.code:     %% has to be `recon:pid_term()'.
      [recon_lib:term_to_pid(PidTerm)].
  
  validate_tspec(Mod, Fun, Args) when is_function(Args) ->
      validate_tspec(Mod, Fun, fun_to_ms(Args));
  validate_tspec(Mod, Fun, Args) ->
      BannedMods = ['_', ?MODULE, io, lists],
      %% The banned mod check can be bypassed by using
      %% match specs if you really feel like being dumb.
  