sig
  exception Bug of string
  exception Empty
  type 'a t
  val test_invariants : 'a Fqueue.t -> unit
  val empty : 'a Fqueue.t
  val push : 'a -> 'a Fqueue.t -> 'a Fqueue.t
  val push_top : 'a -> 'a Fqueue.t -> 'a Fqueue.t
  val enq : 'a -> 'a Fqueue.t -> 'a Fqueue.t
  val bot_exn : 'a Fqueue.t -> 'a
  val bot : 'a Fqueue.t -> 'a option
  val top_exn : 'a Fqueue.t -> 'a
  val top : 'a Fqueue.t -> 'a option
  val pop_exn : 'a Fqueue.t -> 'a * 'a Fqueue.t
  val pop : 'a Fqueue.t -> ('a * 'a Fqueue.t) option
  val deq : 'a Fqueue.t -> ('a * 'a Fqueue.t) option
  val deq_exn : 'a Fqueue.t -> 'a * 'a Fqueue.t
  val discard_exn : 'a Fqueue.t -> 'a Fqueue.t
  val to_list : 'a Fqueue.t -> 'a list
  val length : 'a Fqueue.t -> int
  val is_empty : 'a Fqueue.t -> bool
end