anchor.diff:  
   and p_typ ps pb e = with_comment (p_typ' ps pb) e e.range "!4"
   
  +and p_typ_sep ps pb e = with_comment_sep (p_typ' ps pb) e e.range "!4"
  +
   and p_typ' ps pb e = match e.tm with
     | QForall (bs, trigger, e1)
     | QExists (bs, trigger, e1) ->
  
positive.code:       if range_before_pos crange print_pos
        then begin
          comment_stack := cs ;
          comments_before_pos (acc ^^ comment) print_pos lookahead_pos
          // comments_before_pos acc ^^ str origin ^^ comment (* ^^ str (string_of_pos print_pos) ^^ str " " ^^ str (string_of_pos lookahead) *) print_pos lookahead_pos
        end
        else acc, range_before_pos crange lookahead_pos
  
negative.code:         inline_comment_or_above comm ctor empty
      in
      (* Beware of side effects with comments printing *)
      let datacon_doc =
          separate_map hardline p_constructorBranchAndComments ct_decls
      in
      empty, p_typeDeclPrefix pre true lid bs typ_opt, datacon_doc, jump2
  
  and p_typeDeclPrefix (kw, fsdoc_opt) eq lid bs typ_opt =
    let maybe_with_fsdoc cont =
  