anchor.diff:    if Env.debug env0 <| Options.Other "LayeredEffects" then
       BU.print1 "Typechecking sub_effect: %s\n" (Print.sub_eff_to_string sub);
   
  -  let us, lift = sub.lift |> must in
  -  let r = lift.pos in
  +  let lift_ts = sub.lift |> must in
  +  let r = (lift_ts |> snd).pos in
   
     begin
       let src_ed = Env.get_effect_decl env0 sub.source in
  
positive.code: 
      U.arrow bs c, Env.conj_guard (Env.conj_guard g_f_b g_repr) guard_wp in
  
     if Env.debug env <| Options.Other "LayeredEffects" then
      BU.print1 "tc_layered_lift: before unification k: %s\n" (Print.term_to_string k);
  
    let g = Rel.teq env lift_ty k in
  
negative.code: 
    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
   *)
  