sig
  type elt = Unicode.utf16_char
  val sequence :
    fail:([> `surrogate_fragment of int ] -> int) -> Unicode.UTF16.elt -> int
  val max_sequence : int
  val is_trailing : Unicode.UTF16.elt -> bool
  val decode3 :
    ('-> '-> Unicode.UTF16.elt) ->
    ('-> '-> 'e) ->
    ('-> '-> bool) ->
    ('-> '-> '-> '-> '-> '-> Stdlib.Uchar.t -> 'f) ->
    fail:('->
          '-> '-> '-> '-> '-> [> Unicode.utf16_decode_error ] -> 'f) ->
    '-> '-> '-> '-> '-> 'f
  val decode :
    ('-> '-> Unicode.UTF16.elt) ->
    ('-> '-> 'b) ->
    ('-> '-> bool) ->
    ('-> '-> '-> Stdlib.Uchar.t -> 'c) ->
    fail:('-> '-> '-> [> Unicode.utf16_decode_error ] -> 'c) ->
    '-> '-> 'c
  val encode4 :
    ('-> '-> Unicode.UTF16.elt -> 'f) ->
    fail:('-> '-> '-> '-> '-> '-> [> `unexist ] -> 'f) ->
    '-> '-> '-> '-> '-> '-> Stdlib.Uchar.t -> 'f
  val encode :
    ('-> '-> Unicode.UTF16.elt -> 'b) ->
    fail:('-> '-> [> `unexist ] -> 'b) ->
    '-> '-> Stdlib.Uchar.t -> 'b
  type t = Unicode.utf16_string
  external compare : Unicode.UTF16.t -> Unicode.UTF16.t -> int = "%compare"
  external equal : Unicode.UTF16.t -> Unicode.UTF16.t -> bool = "%equal"
  external length : Unicode.UTF16.t -> int = "%caml_ba_dim_1"
  external get : Unicode.UTF16.t -> int -> Unicode.UTF16.elt
    = "%caml_ba_ref_1"
  external unsafe_get : Unicode.UTF16.t -> int -> Unicode.UTF16.elt
    = "%caml_ba_unsafe_ref_1"
  external set : Unicode.UTF16.t -> int -> Unicode.UTF16.elt -> unit
    = "%caml_ba_set_1"
  external unsafe_set : Unicode.UTF16.t -> int -> Unicode.UTF16.elt -> unit
    = "%caml_ba_unsafe_set_1"
  val empty : Unicode.UTF16.t
  val create : int -> Unicode.UTF16.t
  val copy : Unicode.UTF16.t -> Unicode.UTF16.t
  val cat : Unicode.UTF16.t -> Unicode.UTF16.t -> Unicode.UTF16.t
  external sub : Unicode.UTF16.t -> int -> int -> Unicode.UTF16.t
    = "caml_ba_sub"
  val fill : Unicode.UTF16.t -> int -> int -> Unicode.UTF16.elt -> unit
  val blit : Unicode.UTF16.t -> int -> Unicode.UTF16.t -> int -> int -> unit
  val lead : Unicode.UTF16.t -> int -> int
  val rear : Unicode.UTF16.t -> int -> int
  val get_code :
    fail:(Unicode.UTF16.t ->
          int -> int -> [> Unicode.utf16_decode_error ] -> Stdlib.Uchar.t) ->
    Unicode.UTF16.t -> int Stdlib.ref -> Stdlib.Uchar.t
  val set_code :
    fail:(Unicode.UTF16.t -> int -> [> `unexist ] -> Stdlib.Uchar.t) ->
    Unicode.UTF16.t -> int Stdlib.ref -> Stdlib.Uchar.t -> unit
  val of_utf8 :
    fail:(Unicode.utf8_string ->
          int ->
          int ->
          [> `illegal_sequence
           | `over_17planes of int
           | `overly_long of
               [ `over_17planes of int
               | `some of Stdlib.Uchar.t
               | `surrogate_fragment of int ]
           | `surrogate_fragment of int
           | `truncated
           | `unexist ] ->
          Stdlib.Uchar.t) ->
    Unicode.utf8_string -> Unicode.UTF16.t
  val of_utf32 :
    fail:(Unicode.utf32_string ->
          int ->
          int ->
          [> `illegal_sequence
           | `over_17planes of int
           | `surrogate_fragment of int
           | `unexist ] ->
          Stdlib.Uchar.t) ->
    Unicode.utf32_string -> Unicode.UTF16.t
  val of_array : Unicode.UTF16.elt array -> Unicode.UTF16.t
end