anchor.diff:      if eff_hd_and_args |> is_none then
         (* let _ = BU.print_string "eff_hd_and_args turned out to be None\n" in *) None
       else
  -      let t_hd = type_of_well_typed_term env hd in
  +      let t_hd = typeof_tot_or_gtot_term_fastpath env hd in
         // if Env.debug env <| Options.Other "FastImplicits"
         // then BU.print2 "Computing type of hd %s to be %s\n" (Print.term_to_string hd)
         //        (match t_hd with | None -> "None" | Some k -> Print.term_to_string k);
  
positive.code:   | Tm_type u ->
      Some (mk_tm_type (U_succ u))
  
    | Tm_abs(bs, body, Some ({residual_effect=eff; residual_typ=tbody})) ->
      let mk_comp =
        if Ident.lid_equals eff Const.effect_Tot_lid
        then Some S.mk_Total'
  
negative.code:         | Some _ -> tbody
          | None ->
            let bs, body = SS.open_term bs body in
            BU.map_opt (typeof_tot_or_gtot_term_fastpath (Env.push_binders env bs) body) (SS.close bs) in
      BU.bind_opt tbody (fun tbody ->
        let bs, tbody = SS.open_term bs tbody in
        BU.bind_opt (universe_of_well_typed_term (Env.push_binders env bs) tbody) (fun u ->
          Some (U.arrow bs (f tbody (Some u))))))
  
    | Tm_arrow(bs, c) ->
      let bs, c = SS.open_comp bs c in
  