anchor.diff:      let unary_op, _ = U.head_and_args t in
       let head = mk (Tm_app(unary_op, [a])) (Range.union_ranges unary_op.pos (fst a).pos) in
       let t = mk (Tm_app(head, rest)) t.pos in
  -    type_of_well_typed_term env t
  +    typeof_tot_or_gtot_term_fastpath env t
   
     (* Binary operators *)
     | Tm_app({n=Tm_constant Const_set_range_of}, a1::a2::hd::rest) ->
  
positive.code:         Some (mk_tm_type (S.U_max (uc::us))))
  
        | ({binder_bv=x;binder_qual=imp})::bs ->
          bind_opt (universe_of_well_typed_term env x.sort) (fun u_x ->
          let env = Env.push_bv env x in
          aux env (u_x::us) bs)
  
negative.code:   | Tm_type u ->
      Some (mk_tm_type (U_succ u))
  
    | Tm_abs(bs, body, Some ({residual_effect=eff; residual_typ=tbody})) ->  //AR: TODO: maybe keep residual univ too?
      let mk_comp =
        if Ident.lid_equals eff Const.effect_Tot_lid
        then Some S.mk_Total'
  