functor (Text : UnicodeString.Type->
  sig
    type text = Text.t
    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 : text -> text
    val nfkd : text -> text
    val nfc : text -> text
    val nfkc : text -> text
    module NFCBuf :
      sig
        type buf
        val create : int -> buf
        val contents : buf -> text
        val clear : buf -> unit
        val reset : buf -> unit
        val add_char : buf -> UChar.t -> unit
        val add_string : buf -> text -> unit
        val add_buffer : buf -> buf -> unit
      end
    val nfc_append : text -> text -> text
    val put_nfd : XString.t -> text -> unit
    val put_nfkd : XString.t -> text -> unit
    val put_nfc : XString.t -> text -> unit
    val put_nfkc : XString.t -> text -> unit
    type index = Text.index
    val nfd_inc :
      text -> index -> ([ `Inc of UChar.t list * index * 'a lazy_t ] as 'a)
    val canon_compare : text -> text -> int
    val nfd_decompose : UChar.t -> UChar.t list
    val nfkd_decompose : UChar.t -> UChar.t list
  end