anchor.diff:        let (_, ae) = infer_exp env u e (Some et) in
         u_constrain_subtype u tv tProp;
         u_constrain_subtype u tv et;
  -      ({norm_typ = tv}, (AE_Op (op, [ae]), Some (tv, et))) // Some (tv, et) used to resolve overload
  +      (tv, (AE_Op (op, [ae]), Some (tv, et))) // Some (tv, et) used to resolve overload
   (* TODO
     | EOp (Uop (UIs x), [e]) ->
       let ix = Id ("uu___is_"+ (string_of_id x)) in
  
positive.code:   | None -> e
    | Some (t, et) -> if typ_equal env t et then e else insert_cast e t et
  
  let rec infer_arg_typ (env:env) (u:unifier) (args:(exp * typ option) list):(norm_typ list * aexp list) =
    let infer_arg_typ_fold (ts, ae) ((e:exp), (et:typ option)):(norm_typ list * aexp list) =
      let (t, ae1) =
  (*
        let tr =
  
negative.code:         )
        | _ -> err ("cannot find type '" + (err_id x) + "'")
      )
  let normalize_type (env:env) (t:typ):typ =
    normalize_type_rec env t
  
  // HACK: mangle the parameter types. This will not be needed if transform is performed before typechecker.
  let rec normalize_type_with_transform (env:env) (t:typ) (tr:transform_kind option):typ =
    normalize_type env t
  (*
    let get_type env x t =
  