anchor.diff:          inline_comment_or_above comm ctor empty
       in
       (* Beware of side effects with comments printing *)
  -    let datacon_doc () =
  +    let datacon_doc =
           separate_map hardline p_constructorBranchAndComments ct_decls
       in
  -    p_typeDeclPrefix pre true lid bs typ_opt, (fun () -> jump2 (datacon_doc ()))
  +    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 =
  
positive.code:       group (doc ^^ sep)
      else
        group <| ifflat (group (doc ^^ sep ^^ break1 ^^ comm)) (comm ^^ hardline ^^ doc ^^ sep)
  
  and p_term (ps:bool) (pb:bool) (e:term) = match e.tm with
    | Seq (e1, e2) ->
  
negative.code: and p_typars (bs: list<binder>): document = p_binders true bs
  
  and p_fsdocTypeDeclPairs kw (typedecl, fsdoc_opt) =
    let comm, decl, body, pre = p_typeDecl (kw, fsdoc_opt) typedecl in
    if comm = empty then
      decl ^^ pre body
    else
      group <| ifflat
        (decl ^^ pre body ^/^ comm)
        (decl ^^ nest 2 (hardline ^^ comm ^^ hardline ^^ body))
  
  (* [p_typeDecl pre decl] takes a prefix and a declaration and returns a comment associated with the *)
  (* declaration, the formatted declaration, its body, and a spacing function which should be applied to *)
  (* the body in order to correctly space it from the declaration if there is no comment present or if *)
  (* the comment can be inlined after the body *)
  and p_typeDecl pre = function
    | TyconAbstract (lid, bs, typ_opt) ->
      empty, p_typeDeclPrefix pre false lid bs typ_opt, empty, id
    | TyconAbbrev (lid, bs, typ_opt, t) ->
      let comm, doc = p_typ_sep false false t in
      comm, p_typeDeclPrefix pre true lid bs typ_opt, doc, jump2
    | TyconRecord (lid, bs, typ_opt, record_field_decls) ->
      let p_recordFieldAndComments (ps: bool) (lid, t, doc_opt) =
        let comm, field = with_comment_sep (p_recordFieldDecl ps) (lid, t, doc_opt) (extend_to_end_of_line t.range) "!1" in
        let sep = if ps then semi else empty in
        inline_comment_or_above comm field sep
      in
      let p_fields = braces_with_nesting (
          separate_map_last hardline p_recordFieldAndComments record_field_decls)
      in
      empty, p_typeDeclPrefix pre true lid bs typ_opt, p_fields, (fun d -> space ^^ d)
    | TyconVariant (lid, bs, typ_opt, ct_decls) ->
      let p_constructorBranchAndComments (uid, t_opt, doc_opt, use_of) =
          let range = extend_to_end_of_line (dflt uid.idRange (map_opt t_opt (fun t -> t.range))) in
  