anchor.diff:  (* reset at the end of each module. If you are using individual print function you *)
   (* should wrap them in [with_fs_typ_app] *)
   let should_print_fs_typ_app = BU.mk_ref false
  +
  +let all_explicit (args:list<(term*imp)>) : bool =
  +    BU.for_all (function
  +                | (_, Nothing) -> true
  +                | _ -> false) args
   
   (* Tuples which come from a resugared AST, via term_to_document are already flattened *)
   (* This reference is set to false in term_to_document and checked in p_tmNoEqWith'    *)
  
positive.code:   | Op(op, []) ->
      lparen ^^ space ^^ str (Ident.text_of_id op) ^^ space ^^ rparen
    | Construct (lid, args) when is_dtuple_constructor lid ->
      surround 2 1 (lparen ^^ bar) (separate_map (comma ^^ break1) p_tmEq (List.map fst args)) (bar ^^ rparen)
    | Project (e, lid) ->
      group (prefix 2 0 (p_atomicTermNotQUident e)  (dot ^^ p_qlident lid))
    | _ ->
  
negative.code: and p_tmTuple e = with_comment p_tmTuple' e e.range
  
  and p_tmTuple' e = match e.tm with
    | Construct (lid, args) when is_tuple_constructor lid && all_explicit args ->
        separate_map (comma ^^ break1) (fun (e, _) -> p_tmEq e) args
    | _ -> p_tmEq e
  
  