anchor.diff:            then BU.format2 "let %s : %s" (Print.lbname_to_string lb.lbname) (Print.term_to_string (*env*) lb.lbtyp)
             else "") |> String.concat "\n");
   
  -    [se], []
  +    [se], [], env0
   
   (* [tc_decl env se] typechecks [se] in environment [env] and returns *)
   (* the list of typechecked sig_elts, and a list of new sig_elts elaborated during typechecking but not yet typechecked *)
  -let tc_decl env se: list<sigelt> * list<sigelt> =
  +let tc_decl env se: list<sigelt> * list<sigelt> * Env.env =
     let env = set_hint_correlator env se in
     if Env.debug env Options.Low
     then BU.print1 ">>>>>>>>>>>>>>tc_decl %s\n" (Print.sigelt_to_string se);
     match get_fail_se se with
     | Some (_, false) when not (Env.should_verify env) ->
       (* If we're --laxing, and we didn't find fail_lax, then just ignore the definition *)
  -    [], []
  +    [], [], env
   
     | Some (errnos, _) ->
       if Env.debug env Options.Low then
  
positive.code:     *)
      let env = Env.set_range env r in
      let se = tc_lex_t env ses se.sigquals lids  in
      [se], []
  
    | Sig_bundle(ses, lids) ->
      let env = Env.set_range env r in
  
negative.code:     in
      let ne = tc_eff_decl env ne in
      let se = { se with sigel = Sig_new_effect(ne) } in
      [se], [], env0
  
    | Sig_sub_effect(sub) ->  //no need to two-phase here, since lifts are already lax checked
      let ed_src = Env.get_effect_decl env sub.source in
  