anchor.diff:  
   is_stacktrace([]) ->
       true;
  +is_stacktrace([{M,F,A,L}|Fs])
  +  when is_atom(M), is_atom(F), is_integer(A), is_list(L) ->
  +    is_stacktrace(Fs);
  +is_stacktrace([{M,F,As,L}|Fs])
  +  when is_atom(M), is_atom(F), is_list(As), is_list(L) ->
  +    is_stacktrace(Fs);
   is_stacktrace([{M,F,A}|Fs]) when is_atom(M), is_atom(F), is_integer(A) ->
       is_stacktrace(Fs);
   is_stacktrace([{M,F,As}|Fs]) when is_atom(M), is_atom(F), is_list(As) ->
  
positive.code:     Msg = io_lib:format("::"++Fmt, Args),    % gets indentation right
      io_lib:fwrite("*** ~s ***\n~s\n\n", [Title, Msg]).
  
  
  %% ---------------------------------------------------------------------
  %% Deep list iterator; accepts improper lists/sublists, and also accepts
  
negative.code: format_stacktrace(Trace) ->
      format_stacktrace(Trace, "in function", "in call from").
  
  format_stacktrace([{M,F,A,L}|Fs], Pre, Pre1) when is_integer(A) ->
      [io_lib:fwrite("  ~s ~w:~w/~w~s\n",
                     [Pre, M, F, A, format_stacktrace_location(L)])
       | format_stacktrace(Fs, Pre1, Pre1)];
  format_stacktrace([{M,F,As,L}|Fs], Pre, Pre1) when is_list(As) ->
      A = length(As),
      C = case is_op(M,F,A) of
  	    true when A =:= 1 ->
  