sig
  type align = Left | Center | Right
  type href = URL of string | Page of string | Section of string * string
  type inline =
      Plain of string
    | Emph of string
    | Bold of string
    | Inline_code of string
    | Link of Markdown.text * Markdown.href
    | Image of string * string
  and text = Markdown.inline list
  type block_element =
      Text of Markdown.text
    | Block_quote of Markdown.element list
    | UL of Markdown.block list
    | OL of Markdown.block list
    | DL of (Markdown.text * Markdown.text) list
    | EL of (string option * Markdown.text) list
    | Code_block of string * string list
  and block = Markdown.block_element list
  and table = {
    caption : Markdown.text option;
    header : (Markdown.text * Markdown.align) list;
    content : Markdown.text list list;
  }
  and element =
      Comment of string
    | Block of Markdown.block
    | Table of Markdown.table
    | Raw of string list
    | H1 of Markdown.text * string option
    | H2 of Markdown.text * string option
    | H3 of Markdown.text * string option
    | H4 of Markdown.text * string option
    | H5 of Markdown.text * string option
    | H6 of Markdown.text * string option
  and elements = Markdown.element list
  type pandoc_markdown = {
    title : Markdown.text;
    authors : Markdown.text list;
    date : Markdown.text;
    elements : Markdown.elements;
  }
  val plain : string -> Markdown.text
  val emph : string -> Markdown.text
  val bold : string -> Markdown.text
  val code : string -> Markdown.text
  val image : alt:string -> file:string -> Markdown.text
  val href : ?text:Markdown.text -> Markdown.href -> Markdown.text
  val link :
    ?text:Markdown.text ->
    ?page:string -> ?name:string -> unit -> Markdown.text
  val url : ?text:Markdown.text -> string -> Markdown.text
  val format :
    ('a, Stdlib.Format.formatter, unit, Markdown.text) Stdlib.format4 -> 'a
  val text : Markdown.text -> Markdown.block
  val list : Markdown.block list -> Markdown.block
  val enum : Markdown.block list -> Markdown.block
  val description : (Markdown.text * Markdown.text) list -> Markdown.block
  val codeblock :
    ?lang:string ->
    ('a, Stdlib.Format.formatter, unit, Markdown.block) Stdlib.format4 -> 'a
  val par : Markdown.text -> Markdown.elements
  val quote : Markdown.text -> Markdown.elements
  val block : Markdown.block -> Markdown.elements
  val table : Markdown.table -> Markdown.elements
  val rawfile : string -> Markdown.elements
  val pandoc :
    ?title:Markdown.text ->
    ?authors:Markdown.text list ->
    ?date:Markdown.text -> Markdown.elements -> Markdown.pandoc_markdown
  val section :
    ?name:string -> title:string -> Markdown.elements -> Markdown.elements
  val subsections :
    Markdown.elements -> Markdown.elements list -> Markdown.elements
  val glue : ?sep:'a list -> 'a list list -> 'a list
  val label : string -> string
  val pp_inline :
    ?page:string -> Stdlib.Format.formatter -> Markdown.inline -> unit
  val pp_text :
    ?page:string -> Stdlib.Format.formatter -> Markdown.text -> unit
  val pp_block_element :
    ?page:string -> Stdlib.Format.formatter -> Markdown.block_element -> unit
  val pp_block :
    ?page:string -> Stdlib.Format.formatter -> Markdown.block -> unit
  val pp_element :
    ?page:string -> Stdlib.Format.formatter -> Markdown.element -> unit
  val pp_elements :
    ?page:string -> Stdlib.Format.formatter -> Markdown.elements -> unit
  val pp_pandoc :
    ?page:string ->
    Stdlib.Format.formatter -> Markdown.pandoc_markdown -> unit
end