anchor.diff:      extract_term(Type, Ss, Dst, Vst);
   valfun_4({bif,Op,{f,Fail},Ss,Dst}, Vst0) ->
       validate_src(Ss, Vst0),
  -    Vst = branch_state(Fail, Vst0),
  +    Vst1 = branch_state(Fail, Vst0),
  +
  +    %% Infer argument types. Note that we can't type_test in the general case
  +    %% as the BIF could fail for reasons other than bad arguments.
  +    ArgTypes = bif_arg_types(Op, Ss),
  +    Vst = foldl(fun({Arg, T}, Vsti) ->
  +                        update_type(fun meet/2, T, Arg, Vsti)
  +                end, Vst1, zip(Ss, ArgTypes)),
  +
       Type = bif_type(Op, Ss, Vst),
       extract_term(Type, Ss, Dst, Vst);
   valfun_4({gc_bif,Op,{f,Fail},Live,Ss,Dst}, #vst{current=St0}=Vst0) ->
  
positive.code:         false -> Type
      end.
  
  bif_type('-', Src, Vst) ->
      arith_type(Src, Vst);
  bif_type('+', Src, Vst) ->
  
negative.code: -export([module/2, format_error/1]).
  -export([type_anno/1, type_anno/2, type_anno/4]).
  
  -import(lists, [any/2,dropwhile/2,foldl/3,map/2,reverse/1,zip/2]).
  
  %% To be called by the compiler.
  
  