sig
  type text
  class nfd :
    UChar.t #OOChannel.obj_output_channel ->
    [UChar.t] OOChannel.obj_output_channel
  class nfc :
    UChar.t #OOChannel.obj_output_channel ->
    [UChar.t] OOChannel.obj_output_channel
  class nfkd :
    UChar.t #OOChannel.obj_output_channel ->
    [UChar.t] OOChannel.obj_output_channel
  class nfkc :
    UChar.t #OOChannel.obj_output_channel ->
    [UChar.t] OOChannel.obj_output_channel
  val nfd : UNF.Type.text -> UNF.Type.text
  val nfkd : UNF.Type.text -> UNF.Type.text
  val nfc : UNF.Type.text -> UNF.Type.text
  val nfkc : UNF.Type.text -> UNF.Type.text
  module NFCBuf :
    sig
      type buf
      val create : int -> UNF.Type.NFCBuf.buf
      val contents : UNF.Type.NFCBuf.buf -> UNF.Type.text
      val clear : UNF.Type.NFCBuf.buf -> unit
      val reset : UNF.Type.NFCBuf.buf -> unit
      val add_char : UNF.Type.NFCBuf.buf -> UChar.t -> unit
      val add_string : UNF.Type.NFCBuf.buf -> UNF.Type.text -> unit
      val add_buffer : UNF.Type.NFCBuf.buf -> UNF.Type.NFCBuf.buf -> unit
    end
  val nfc_append : UNF.Type.text -> UNF.Type.text -> UNF.Type.text
  val put_nfd : XString.t -> UNF.Type.text -> unit
  val put_nfkd : XString.t -> UNF.Type.text -> unit
  val put_nfc : XString.t -> UNF.Type.text -> unit
  val put_nfkc : XString.t -> UNF.Type.text -> unit
  type index
  val nfd_inc :
    UNF.Type.text ->
    UNF.Type.index ->
    ([ `Inc of UChar.t list * UNF.Type.index * 'a lazy_t ] as 'a)
  val canon_compare : UNF.Type.text -> UNF.Type.text -> int
  val nfd_decompose : UChar.t -> UChar.t list
  val nfkd_decompose : UChar.t -> UChar.t list
end