anchor.diff:    | "op_Array_Assignment" -> Some ".()<-"
     | "op_String_Access" -> Some ".[]"
     | "op_Array_Access" -> Some ".()"
  -  | Prefix "op__" op -> name_of_op op
  -  | _ -> None
  +  | _ -> 
  +    if BU.starts_with s "op__" then
  +      name_of_op(BU.substring_from s (String.length "op__"))
  +    else
  +      None
   
   let resugar_match_pat (p:S.pat) : A.pattern = 
     (* We lose information when desugar PatAscribed to able to resugar it back *)
  
positive.code:       | Meta_labeled (l, _, p) ->
            mk (A.Labeled(resugar_term e, l, p))
        | Meta_desugared i -> 
            resugar_meta_desugared i
        | Meta_named _ 
        | Meta_monadic _ 
        | Meta_monadic_lift _ -> 
            failwith "cases not generated by desugar"
        end
      
      | Tm_unknown _ -> mk A.Wild
  
negative.code:             | hd :: tl -> last tl
              | _ -> failwith "Empty list." in
            let body, _ = last args in
            begin match (SS.compress body).n with
              | Tm_abs(xs, body, _) ->
                  let xs, body = SS.open_term xs body in
                  let xs = xs |> List.map (fun (b, qual) -> resugar_bv_as_binder b t.pos) in 
                  let body = resugar_term body in
                  mk (A.Sum(xs, body))
                 
              | _ -> 
                let args = args |> List.map (fun (e, qual) ->
                  resugar_term e) in
                let e = resugar_term e in
                List.fold_left(fun acc x -> mk (A.App(acc, x, A.Nothing))) e args
            end
  
          (*| Some field_projector when (U.field_projector_contains_constructor field_projector) ->
            (* get the field name from the fvar *)
  