anchor.diff:                                (Print.term_to_string ctx_u.ctx_uvar_typ)
                                 reason
                                 (Range.string_of_range r);
  +
                 let g =
                   Errors.with_ctx (BU.format3 "While checking implicit %s set to %s of expected type %s"
                                                 (Print.uvar_to_string ctx_u.ctx_uvar_head)
                                                 (N.term_to_string env tm)
                                                 (N.term_to_string env ctx_u.ctx_uvar_typ))
  -                                (fun () -> env.check_type_of must_total env tm ctx_u.ctx_uvar_typ)
  +                                (fun () -> env.check_type_and_effect_of_well_typed_tot_or_gtot_term env tm ctx_u.ctx_uvar_typ (not env.phase1 && not env.lax))
                 in
                 let g' =
                   match discharge_guard' (Some (fun () ->
  
positive.code:               |> BU.set_elements
                |> List.for_all (fun uv -> uv.ctx_uvar_should_check = Allow_unresolved) in
              if is_tac then if tm_ok_for_tac tm
                             then until_fixpoint (out, true) tl  //Move on to the next imp
                             else until_fixpoint (hd::out, changed) tl  //Move hd to out
              else begin
                if Env.debug env <| Options.Other "Rel"
                then BU.print5 "Checking uvar %s resolved to %s at type %s, introduce for %s at %s\n"
  
negative.code:                                           (Print.lid_to_string c1.effect_name)
                                            (Print.lid_to_string c2.effect_name))) env.range
               in
               let univ_sub_probs, wl = [], wl in
                 // List.fold_left2 (fun (univ_sub_probs, wl) u1 u2 ->
                 //   let p, wl = sub_prob wl
                 //     (S.mk (S.Tm_type u1) Range.dummyRange)
                 //     EQ
                 //     (S.mk (S.Tm_type u2) Range.dummyRange)
                 //     "effect universes" in
                 //   (univ_sub_probs@[p]), wl) ([], wl) c1.comp_univs c2.comp_univs in
               if BU.physical_equality wpc1 wpc2
               then
                 let tprob = TProb (problem_using_guard orig c1.result_typ problem.relation c2.result_typ None "result type") in
                 solve env (attempt (univ_sub_probs@[tprob]) wl)
               else let c2_decl, qualifiers = must (Env.effect_decl_opt env c2.effect_name) in
                    if qualifiers |> List.contains Reifiable
                    then let c1_repr =
  