anchor.diff:    compile({M,F,lists:duplicate(Ari,{var,'_'}),[],Actions});
   compile({M,F,As,Gs,Actions}) when is_list(As) ->
     {Vars,Args} = compile_args(As),
  -  {{M,F,length(As)},
  +  {{M,F,len(F,As)},
      [{Args,compile_guards(Gs,Vars),compile_acts(Actions)}],
      flags()}.
  +
  +len('_',_) -> '_';
  +len(_,As)  -> length(As).
   
   flags() -> [local].
   
  
positive.code: %% transforms a string to a call trace expression;
  %% {MFA,MatchSpec} == {{M,F,A},{Head,Cond,Body}}
  
  
  %% TODO
  %%redbug_msc:transform("a:b(\"\"++_)").
  %%** exception error: no function clause matching 
  %%                    redbug_msc:cfl({var,'_'},{[],[]})
  %%     in function  redbug_msc:ca_fun/2
  
  -module('redbug_msc').
  -author('Mats Cronqvist').
  
negative.code:           {M,F,Ari};
          {ok,[{call,1,{remote,1,{atom,1,M},{atom,1,F}},Args}]} ->
            {M,F,[arg(A) || A<-Args]};
          {ok,[{call,1,{remote,1,{atom,1,M},{var,1,'_'}},Args}]} ->
            {M,'_',[arg(A) || A<-Args]};
          {ok,[{remote,1,{atom,1,M},{atom,1,F}}]} ->
            {M,F,'_'};
          {ok,C} ->
            exit({this_is_too_confusing,C})
       end
    end.
  
  