anchor.diff:    | _ -> failwith "Impossible!"
   
   and universe_of_well_typed_term env t =
  -  match type_of_well_typed_term env t with
  -  | Some ({n=Tm_type u}) -> Some u
  -  | _ -> None
  +  bind_opt (type_of_well_typed_term env t) (fun k ->
  +    let rec aux (maybe_norm:bool) (k:typ) =
  +      match (SS.compress k).n with
  +      | Tm_type u -> Some u
  +      | Tm_meta (k, _) -> aux maybe_norm k
  +      | Tm_refine (x, _) -> aux maybe_norm x.sort
  +      | Tm_ascribed (k, _, _) -> aux maybe_norm k
  +      | _ ->
  +        if maybe_norm then aux false (N.unfold_whnf env k)
  +        else None in
  +    aux true k)
   
   let type_of_well_typed_tot_or_gtot_term env t = type_of_well_typed_term env t
   
  
positive.code:       else None
      in
      BU.bind_opt mk_comp (fun f ->
      BU.bind_opt (universe_of_well_typed_term env tbody) (fun u ->
      Some (S.mk (Tm_arrow(bs, f tbody (Some u))) t.pos)))
  
    | Tm_arrow(bs, c) ->
      let bs, c = SS.open_comp bs c in
  
negative.code:           if not must_tot ||
               lid_equals eff Const.effect_Tot_lid ||
               N.non_info_norm env k
            then (* let _ = BU.print_string "Finishing on fast path!\n" in *) TcUtil.check_has_type env t k' k
            else raise_error (Errors.Fatal_UnexpectedImplictArgument,
                   (BU.format1 "Implicit argument %s is GTot, expected a Tot" (Print.term_to_string t)))
                   t.pos
  