sig
  type t
  val text : Syntax.t -> Markdown.text
  val publish :
    page:Doc.page ->
    name:string ->
    descr:Markdown.text ->
    synopsis:Syntax.t ->
    ?details:Markdown.elements ->
    ?generated:(unit -> Markdown.elements) -> unit -> Syntax.t
  val unit : Syntax.t
  val any : Syntax.t
  val int : Syntax.t
  val ident : Syntax.t
  val string : Syntax.t
  val number : Syntax.t
  val boolean : Syntax.t
  val tag : string -> Syntax.t
  val array : Syntax.t -> Syntax.t
  val tuple : Syntax.t list -> Syntax.t
  val union : Syntax.t list -> Syntax.t
  val option : Syntax.t -> Syntax.t
  val record : (string * Syntax.t) list -> Syntax.t
  val data : string -> Markdown.href -> Syntax.t
  type tag = {
    tag_name : string;
    tag_label : Markdown.text;
    tag_descr : Markdown.text;
  }
  val define : Markdown.text -> Markdown.text -> Markdown.block_element
  val tags : ?title:string -> Syntax.tag list -> Markdown.element
  type field = {
    fd_name : string;
    fd_syntax : Syntax.t;
    fd_descr : Markdown.text;
  }
  val fields : ?title:string -> Syntax.field list -> Markdown.element
end