anchor.diff:              | Tm_fvar fv when (U.field_projector_contains_constructor fv.fv_name.v.str) ->
                 let f = lid_of_path [fv.fv_name.v.str] t.pos in
                 mk (A.Project(resugar_term t, f))
  -            | Tm_fvar fv when (BU.starts_with fv.fv_name.v.str I.reserved_prefix) ->
  -              mk (A.Discrim(lid_of_path [fv.fv_name.v.str] t.pos))
               | _ -> resugar_term t
             end
   
  
positive.code:           let args = args |> List.map (fun (e, qual) ->
              resugar_term e) in
            let e = resugar_term e in
            let rec aux e = function
              | [] -> e
              | hd::tl ->
                let e = mk (A.App(e, hd, A.Nothing)) in
                aux e tl in
            aux e args
  
          | Some "tuple" ->
            let args = args |> List.map (fun (e, qual) ->
              resugar_term e) in
            let rec aux e = function
              | [] -> e
              | hd::tl ->
                let e = mk (A.Op("*", [e;hd])) in
                aux e tl in
            let e = mk(A.Op("*", [args.Head; args.Tail.Head])) in
            aux e args.Tail.Tail
  
          | Some "dtuple" -> 
            (* this is desugared from Sum(binders*term) *)
  
negative.code:   end
  
  let string_to_op s =
    let name_of_op = function
      | "Amp" -> Some "&"
      | "At" -> Some "@"
  