A simple polymorphic functional queue.

Amortized running times assumes that enqueue/dequeue are used sequentially, threading the changing Fqueue through the calls.

exception Empty
type 'a t
val test_invariants : 'a t -> unit
test via asserts whether invariants hold
val empty : 'a t
The empty queue
val enqueue : 'a t -> 'a -> 'a t
enqueue t x returns a queue with adds x to the end of t. Complexity: O(1)
val enqueue_top : 'a t -> 'a -> 'a t
enqueue a single element on the *top* of the queue. Complexity: amortized O(1)
val bot_exn : 'a t -> 'a
returns the bottom (most-recently enqueued element). Raises Empty if no element is found. Complexity: O(1)
val bot : 'a t -> 'a option
like bot_exn, but returns result optionally, without exception. Complexity: O(1)
val top_exn : 'a t -> 'a
Like bot_exn, except returns top (least-recently enqueued element. Complexity: O(1)
val top : 'a t -> 'a option
like top_exn, but returns result optionally, without exception, Complexity: O(1)
val dequeue_exn : 'a t -> 'a * 'a t
dequeue_exn t removes and returns the front of t, raising Empty if t is empty. Complexity: amortized O(1)
val dequeue : 'a t -> ('a * 'a t) option
Like dequeue_exn, but returns result optionally, without exception. Complexity: amortized O(1)
val discard_exn : 'a t -> 'a t
Returns version of queue with top element removed. Complexity: amortized O(1)
val to_list : 'a t -> 'a list
to_list t returns a list of the elements in t in order from least-recently-added (at the head) to most-recently added (at the tail). Complexity: O(n)
val length : 'a t -> int
complexity: O(1)
complexity: O(1)
val is_empty : 'a t -> bool
val compare : ('a -> 'a -> int) -> 'a t -> 'a t -> int
val t_of_sexp : (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
val sexp_of_t : ('a -> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
val bin_t : 'a Bin_prot.Type_class.t -> 'a t Bin_prot.Type_class.t
val bin_read_t : 'a Bin_prot.Read.reader -> 'a t Bin_prot.Read.reader
val __bin_read_t__ : 'a Bin_prot.Read.reader -> (int -> 'a t) Bin_prot.Read.reader
val bin_reader_t : 'a Bin_prot.Type_class.reader -> 'a t Bin_prot.Type_class.reader
val bin_size_t : 'a Bin_prot.Size.sizer -> 'a t Bin_prot.Size.sizer
val bin_write_t : 'a Bin_prot.Write.writer -> 'a t Bin_prot.Write.writer
val bin_writer_t : 'a Bin_prot.Type_class.writer -> 'a t Bin_prot.Type_class.writer