anchor.diff:        else begin
             let c1, g_c1 = TcComm.lcomp_comp lc1 in
             let c2, g_c2 = TcComm.lcomp_comp lc2 in
  +
  +          (*
  +           * AR: we need to be careful about handling g_c2 since it may have x free
  +           *     whereever we return/add this, we have to either close it or substitute it
  +           *)
  +
  +          let trivial_guard = Env.conj_guard g_c1 (
  +            match b with
  +            | Some x ->
  +              let b = S.mk_binder x in
  +              if S.is_null_binder b
  +              then g_c2
  +              else Env.close_guard env [b] g_c2
  +            | None -> g_c2) in
  +
             debug (fun () ->
               BU.print3 "(1) bind: \n\tc1=%s\n\tx=%s\n\tc2=%s\n(1. end bind)\n"
               (Print.comp_to_string c1)
  
positive.code:                       let c2 = SS.subst_comp [NT(x,e1)] c2 in
                        let x_eq_e = U.mk_eq2 u_res_t1 res_t1 e1 (bv_to_name x) in
                        let c2, g_w = weaken_comp (Env.push_binders env [S.mk_binder x]) c2 x_eq_e in
                        let c, g_bind = mk_bind c1 b c2 in
                        c, Env.conj_guard g_w g_bind
                  //Caution: here we keep the flags for c2 as is, these flags will be overwritten later when we do md.bind below
                  //If we decide to return c2 as is (after inlining), we should reset these flags else bad things will happen
              else mk_bind c1 b c2
        end
    in TcComm.mk_lcomp joined_eff
                       lc2.res_typ
  
negative.code:           let try_simplify () : either<(comp * guard_t * string), string> =
              let aux_with_trivial_guard () =
                match aux () with
                | Inl (c, reason) -> Inl (c, trivial_guard, reason)
                | Inr reason -> Inr reason in
              if Option.isNone (Env.try_lookup_effect_lid env C.effect_GTot_lid) //if we're very early in prims
              then if U.is_tot_or_gtot_comp c1
                   && U.is_tot_or_gtot_comp c2
                   then Inl (c2, trivial_guard, "Early in prims; we don't have bind yet")
                   else raise_error (Errors.Fatal_NonTrivialPreConditionInPrims,
                                     "Non-trivial pre-conditions very early in prims, even before we have defined the PURE monad")
                                     (Env.get_range env)
  