anchor.diff:            (* KM : I don't think that '-' is resugared correctly here *)
             //NS: this seems to produce the wrong output on things like
             begin match D.handleable_args_length op with
  -            | 1 -> mk (A.Op(op, resugar (last args)))
  -            | 2 -> mk (A.Op(op, resugar (last_two args)))
  -            | 3 -> mk (A.Op(op, resugar (last_three args)))
  +            | 1 when List.length args > 0 -> mk (A.Op(op, resugar (last args)))
  +            | 2 when List.length args > 1 -> mk (A.Op(op, resugar (last_two args)))
  +            | 3 when List.length args > 2 -> mk (A.Op(op, resugar (last_three args)))
               | _ -> resugar_as_app e args
             end
       end
  
positive.code:         let binders, term, is_pat_app = match (SS.compress def).n with
            | Tm_abs(b, t, _) ->
              let b, t = SS.open_term b t in
              b, t, true
            | _ -> [], def, false
          in
          let pat, term = match bnd.lbname with
            | Inr fv -> mk_pat (A.PatName fv.fv_name.v), term
            | Inl bv ->
  
negative.code:             | _ -> resugar_term t
            end
  
          | Some "try_with" when List.length args > 1 ->
            (* only the last two args are from original AST terms, others are added by typechecker *)
            (* TODO: we need a place to store the information in the args added by the typechecker *)
            let new_args = last_two args in
  