anchor.diff:  assert(Fun,Tag) ->
     try Fun()
     catch 
  -    _:{_,{error,{1,erl_parse,L}}} -> exit({Tag,lists:flatten(L)});
  -    _:R                           -> exit({Tag,R})
  +    _:{_,{error,{1,erl_parse,L}}}-> exit({{syntax_error,lists:flatten(L)},Tag});
  +    _:R                          -> exit({R,Tag})
     end.
   
   
  
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",
  