anchor.diff:    let fallback fv =
       match infix_prim_ops |> BU.find_opt (fun d -> fv_eq_lid fv (fst d)) with
       | Some op ->
  -      Some (snd op)
  +      Some (snd op, 0)
       | _ ->
         let length = String.length(fv.fv_name.v.nsstr) in
         let str = if length=0 then fv.fv_name.v.str
             else BU.substring_from fv.fv_name.v.str (length+1) in
  -      if BU.starts_with str "dtuple" then Some "dtuple"
  -      else if BU.starts_with str "tuple" then Some "tuple"
  -      else if BU.starts_with str "try_with" then Some "try_with"
  -      else if fv_eq_lid fv C.sread_lid then Some fv.fv_name.v.str
  +      if BU.starts_with str "dtuple" then Some ("dtuple", 0)
  +      else if BU.starts_with str "tuple" then Some ("tuple", 0)
  +      else if BU.starts_with str "try_with" then Some ("try_with", 0)
  +      else if fv_eq_lid fv C.sread_lid then Some (fv.fv_name.v.str, 0)
         else None
     in
     match (SS.compress t).n with
  
positive.code:           | _ -> resugar_as_app e args
          end
  
        | Some "dtuple" when List.length args > 0 ->
          (* this is desugared from Sum(binders*term) *)
          let args = last args in
          let body = match args with
  
negative.code:         let branches = resugar_branches handler in
          mk (A.TryWith(e, branches))
  
        | Some ("try_with", _) ->
          resugar_as_app e args
  
        | Some (op, _) when op = "forall" || op = "exists" ->
          (* desugared from QForall(binders * patterns * body) to Tm_app(forall, Tm_abs(binders, Tm_meta(body, meta_pattern(list<args>)*)
          let rec uncurry xs pat (t:A.term) = match t.tm with
            | A.QExists(x, p , body)
  