functor (A : Array.S->   sig     module Array :       sig         type elt = A.elt         type t = A.t         val empty : t         val make : int -> elt -> t         val length : t -> int         val get : t -> int -> elt         val set : t -> int -> elt -> unit         val sub : t -> int -> int -> t         val copy : t -> t         val blit : t -> int -> t -> int -> int -> unit         val iter : (elt -> unit) -> t -> unit       end     type t     exception Empty     val create : ?bounded:bool -> int -> t     val copy : t -> t     val capacity : t -> int     val max_capacity : t -> int option     val length : t -> int     val blit_from : t -> Array.t -> int -> int -> unit     val blit_into : t -> Array.t -> int -> int -> int     val append : t -> into:t -> unit     val to_list : t -> Array.elt list     val clear : t -> unit     val reset : t -> unit     val is_empty : t -> bool     val junk_front : t -> unit     val junk_back : t -> unit     val skip : t -> int -> unit     val iter : t -> f:(Array.elt -> unit) -> unit     val iteri : t -> f:(int -> Array.elt -> unit) -> unit     val get_front : t -> int -> Array.elt     val get_back : t -> int -> Array.elt     val push_back : t -> Array.elt -> unit     val peek_front : t -> Array.elt     val peek_back : t -> Array.elt     val take_back : t -> Array.elt option     val take_back_exn : t -> Array.elt     val take_front : t -> Array.elt option     val take_front_exn : t -> Array.elt     val of_array : Array.t -> t     val to_array : t -> Array.t   end