anchor.diff:    [ac_fun(A)|| A <- As].
   
   ac_fun("stack") -> {message,{process_dump}};
  -ac_fun("return")-> {return_trace}.
  +ac_fun("return")-> {return_trace};
  +ac_fun(X)       -> exit({unknown_action,X}).
   
   compile_guards(Gs,Vars) ->
     {Vars,O} = lists:foldr(fun gd_fun/2,{Vars,[]},Gs),
  
positive.code: guard({op,1,Op,One})            -> {Op,guard(One)};           % binary op
  guard(Guard)                    -> arg(Guard).                % variable
  
  arg({cons,_,_,_})   -> exit({syntax_error,no_lists_in_args});
  arg({tuple,1,Args}) -> {tuple,[arg(A)||A<-Args]};
  arg({T,1,Var})      -> {T,Var}.
  
  
negative.code:      ,{"a:b(X,y)when is_atom(Y)",
         unbound_variable}
       ,{"x:c([string])",
         {syntax_error,"lists not allowed in arg list"}}
       ,{"x(s)",
         this_is_too_confusing}
       ,{"x:c(S)when S==x;S==y",
         {syntax_error,"syntax error before: S"}}
       ,{"x:y(z)->bla",
         unknown_action}
       ,{"a:b(X,y)when not is_atom(X)",
         [{{a,b,2},{['$1',y],[{'not',{is_atom,'$1'}}],[]}}]}
       ,{"a:b(X,y)when not is_atom(X) -> return",
  