functor (Config : ConfigInt.Type->
  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