anchor.diff:      H = #c_var{name='H'},
       C1 = #c_clause{pats=[#c_cons{hd=X, tl=Xs}], guard=#c_literal{val=true},
   		   body=#c_let{vars=[H],
  -			       arg=#c_apply{op=F, args=[X]},
  -			       body=#c_call{module=#c_literal{val=erlang},
  +			       arg=#c_apply{anno=Anno, op=F, args=[X]},
  +			       body=#c_call{anno=Anno,
  +					    module=#c_literal{val=erlang},
   					    name=#c_literal{val='++'},
   					    args=[H,
  -						  #c_apply{op=Loop,
  +						  #c_apply{anno=Anno,
  +							   op=Loop,
   							   args=[Xs]}]}}},
       C2 = #c_clause{pats=[#c_literal{val=[]}], guard=#c_literal{val=true},
   		   body=#c_literal{val=[]}},
       Err = #c_tuple{es=[#c_literal{val='function_clause'}, Xs]},
       C3 = #c_clause{pats=[Xs], guard=#c_literal{val=true},
  -		   body=#c_primop{name=#c_literal{val='match_fail'},
  -				  args=[Err]}},
  +		   body=match_fail(Anno, Err)},
       Fun = #c_fun{vars=[Xs],
   		 body=#c_case{arg=Xs, clauses=[C1, C2, C3]}},
       L = #c_var{name='L'},
       expr(#c_let{vars=[F, L], arg=#c_values{es=[Arg1, Arg2]},
   		body=#c_letrec{defs=[{Loop,Fun}],
  -			       body=#c_apply{op=Loop, args=[L]}}},
  +			       body=#c_apply{anno=Anno, op=Loop, args=[L]}}},
   	 Sub);
  -call_1(_Call, lists, filter, [Arg1,Arg2], Sub) ->
  +call_1(#c_call{anno=Anno}, lists, filter, [Arg1,Arg2], Sub) ->
       Loop = #c_var{name={'lists^filter',1}},
       F = #c_var{name='F'},
       Xs = #c_var{name='Xs'},
  
positive.code: %%
  eval_failure(Call, Reason) ->
      add_warning(Call, {eval_failure,Reason}),
      #c_call{module=#c_literal{val=erlang},
  	    name=#c_literal{val=error},
  	    args=[#c_literal{val=Reason}]}.
  
  %% simplify_apply(Call0, Mod, Func, Args) -> Call
  %%  Simplify an apply/3 to a call if the number of arguments
  
negative.code:     CC2 = #c_clause{pats=[#c_literal{val=false}], guard=#c_literal{val=true},
  		    body=Xs},
      CC3 = #c_clause{pats=[X], guard=#c_literal{val=true},
  		    body=match_fail(Anno, Err1)},
      Case = #c_case{arg=B, clauses = [CC1, CC2, CC3]},
      C1 = #c_clause{pats=[#c_cons{hd=X, tl=Xs}], guard=#c_literal{val=true},
  		   body=#c_let{vars=[B],
  			       arg=#c_apply{anno=Anno, op=F, args=[X]},
  			       body=#c_let{vars=[Xs],
  					   arg=#c_apply{anno=Anno,
  							op=Loop,
  							args=[Xs]},
  					   body=Case}}},
      C2 = #c_clause{pats=[#c_literal{val=[]}], guard=#c_literal{val=true},
  		   body=#c_literal{val=[]}},
      Err2 = #c_tuple{es=[#c_literal{val='function_clause'}, Xs]},
      C3 = #c_clause{pats=[Xs], guard=#c_literal{val=true},
  		   body=match_fail(Anno, Err2)},
      Fun = #c_fun{vars=[Xs],
  		 body=#c_case{arg=Xs, clauses=[C1, C2, C3]}},
      L = #c_var{name='L'},
      expr(#c_let{vars=[F, L], arg=#c_values{es=[Arg1, Arg2]},
  		body=#c_letrec{defs=[{Loop,Fun}],
  			       body=#c_apply{anno=Anno, op=Loop, args=[L]}}},
      Sub);
  call_1(#c_call{anno=Anno}, lists, foldl, [Arg1,Arg2,Arg3], Sub) ->
      Loop = #c_var{name={'lists^foldl',2}},
      F = #c_var{name='F'},
      Xs = #c_var{name='Xs'},
      X = #c_var{name='X'},
      A = #c_var{name='A'},
      C1 = #c_clause{pats=[#c_cons{hd=X, tl=Xs}], guard=#c_literal{val=true},
  		   body=#c_apply{anno=Anno,
  				 op=Loop,
  				 args=[Xs, #c_apply{anno=Anno,
  						    op=F,
  						    args=[X, A]}]}},
      C2 = #c_clause{pats=[#c_literal{val=[]}], guard=#c_literal{val=true}, body=A},
      Err = #c_tuple{es=[#c_literal{val='function_clause'}, Xs]},
      C3 = #c_clause{pats=[Xs], guard=#c_literal{val=true},
  		   body=match_fail(Anno, Err)},
      Fun = #c_fun{vars=[Xs, A],
  		 body=#c_case{arg=Xs, clauses=[C1, C2, C3]}},
      L = #c_var{name='L'},
      expr(#c_let{vars=[F, A, L], arg=#c_values{es=[Arg1, Arg2, Arg3]},
  		body=#c_letrec{defs=[{Loop,Fun}],
  			       body=#c_apply{anno=Anno, op=Loop, args=[L, A]}}},
  	 Sub);
  call_1(#c_call{anno=Anno}, lists, foldr, [Arg1,Arg2,Arg3], Sub) ->
      Loop = #c_var{name={'lists^foldr',2}},
      F = #c_var{name='F'},
      Xs = #c_var{name='Xs'},
      X = #c_var{name='X'},
      A = #c_var{name='A'},
      C1 = #c_clause{pats=[#c_cons{hd=X, tl=Xs}], guard=#c_literal{val=true},
  		   body=#c_apply{anno=Anno,
  				 op=F,
  				 args=[X, #c_apply{anno=Anno,
  						   op=Loop,
  						   args=[Xs, A]}]}},
      C2 = #c_clause{pats=[#c_literal{val=[]}], guard=#c_literal{val=true}, body=A},
      Err = #c_tuple{es=[#c_literal{val='function_clause'}, Xs]},
      C3 = #c_clause{pats=[Xs], guard=#c_literal{val=true},
  		   body=match_fail(Anno, Err)},
      Fun = #c_fun{vars=[Xs, A],
  		 body=#c_case{arg=Xs, clauses=[C1, C2, C3]}},
      L = #c_var{name='L'},
      expr(#c_let{vars=[F, A, L], arg=#c_values{es=[Arg1, Arg2, Arg3]},
  		body=#c_letrec{defs=[{Loop,Fun}],
  			       body=#c_apply{anno=Anno, op=Loop, args=[L, A]}}},
  	 Sub);
  call_1(#c_call{anno=Anno}, lists, mapfoldl, [Arg1,Arg2,Arg3], Sub) ->
      Loop = #c_var{name={'lists^mapfoldl',2}},
      F = #c_var{name='F'},
      Xs = #c_var{name='Xs'},
  