anchor.diff:                | [] -> ()
                 | _ -> failwith "Impossible: Can't have a let rec annotation but no expected type"
             in
  -          let bs, envbody, g, _ = tc_binders env bs in
  -          None, bs, [], None, envbody, body, g
  +          let bs, envbody, g_env, _ = tc_binders env bs in
  +          None, bs, [], None, envbody, body, g_env
   
         | Some t ->
             let t = SS.compress t in
  
positive.code:                           match t.n with
                            | Tm_arrow(bs_expected, c_expected) ->
                              let bs_expected, c_expected = SS.open_comp bs_expected c_expected in
                              let (env_bs_bs', bs', more, guard_env_bs, subst) = check_binders env_bs more_bs bs_expected in
                              let guard'_env = Env.close_guard env_bs bs guard_env_bs in
                              handle_more (env_bs_bs', bs@bs', more, Env.conj_guard guard_env guard'_env, subst) c_expected body
                            | _ ->
                              let body = U.abs more_bs body None in
  
negative.code:                     *)
                      | _ ->
                        if Env.debug env Options.High then BU.print1 "Checking binder %s\n" (Print.bv_to_string hd);
                        let t, _, g1_env = tc_tot_or_gtot_term env hd.sort in
                        let g2_env =
                          //cf issue #57 (the discussion at the end about subtyping vs. equality in check_binders)
                          //check that the context is more demanding of the argument type
                          if Rel.teq_nosmt env t expected_t
  