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