anchor.diff:    | [] -> true
     | x :: xs -> if f x then all f xs else false
   
  -let all_explicit (args:list<(term*imp)>) : bool =
  +let all1_explicit (args:list<(term*imp)>) : bool =
  +    not (List.isEmpty args) &&
       BU.for_all (function
                   | (_, Nothing) -> true
                   | _ -> false) args
  
positive.code:     str (Ident.text_of_id op) ^^ p_atomicTermNotQUident e
    | Op(op, []) ->
      lparen ^^ space ^^ str (Ident.text_of_id op) ^^ space ^^ rparen
    | Construct (lid, args) when is_dtuple_constructor lid ->
      if all_explicit args
      then surround 2 1 (lparen ^^ bar) (separate_map (comma ^^ break1) p_tmEq (List.map fst args)) (bar ^^ rparen)
      else
      begin match args with
        | [] -> p_quident lid
        | [arg] -> group (p_quident lid ^/^ p_argTerm arg)
        | hd::tl ->
            group (
                group (prefix2 (p_quident lid) (p_argTerm hd)) ^^
                      jump2 (separate_map break1 p_argTerm tl))
      end
  
    | Project (e, lid) ->
      group (prefix 2 0 (p_atomicTermNotQUident e)  (dot ^^ p_qlident lid))
    | _ ->
  
negative.code:         group (soft_surround_map_or_flow 2 0 head_doc (head_doc ^^ space) break1 empty p_argTerm args)
        )
  
    (* (explicit) dependent tuples are handled below *)
    | Construct (lid, args) when is_general_construction e
          && not (is_dtuple_constructor lid && all1_explicit args) ->
      begin match args with
        | [] -> p_quident lid
        | [arg] -> group (p_quident lid ^/^ p_argTerm arg)
  