anchor.diff:  
     pure_wp_uvar, guard_wp
   
  +
  +let check_no_subtyping_for_layered_combinator env (t:term) (k:option<typ>) =
  +  if Env.debug env <| Options.Other "LayeredEffects"
  +  then BU.print2 "Checking that %s is well typed with no subtyping (k:%s)\n"
  +         (Print.term_to_string t)
  +         (match k with
  +          | None -> "None"
  +          | Some k -> Print.term_to_string k);
  +  match k with
  +  | None -> ignore (tc_trivial_guard ({ env with use_eq = true }) t)
  +  | Some k -> ignore (tc_check_trivial_guard ({ env with use_eq = true }) t k)
  +
  +
   (*
    * Typechecking of layered effects
    *)
  
positive.code:     let k = U.arrow bs (S.mk_Total' repr (Some u_a)) in
      let g_eq = Rel.teq env ty k in
      Rel.force_trivial_guard env (Env.conj_guard g g_eq);
      ret_us, ret_t, SS.close_univ_vars us (k |> N.remove_uvar_solutions env) in
  
    log_combinator "return_repr" return_repr;
  
  
negative.code:     let k = U.abs (bs@[f_bs; g_bs; p_b]) t_body None in
      let guard_eq = Rel.teq env t k in
      [guard_f; guard_g; guard_body; guard_eq] |> List.iter (Rel.force_trivial_guard env);
      let k = k |> N.remove_uvar_solutions env in
      check_no_subtyping_for_layered_combinator env k (Some ty);
  
      if_then_else_us, SS.close_univ_vars if_then_else_us k, if_then_else_ty in
  
    log_combinator "if_then_else" if_then_else;
  
  