sig
  module type DATA =
    sig type t val equal : Qstack.DATA.t -> Qstack.DATA.t -> bool end
  module Make :
    functor (D : DATA->
      sig
        type t
        exception Empty
        val create : unit -> Qstack.Make.t
        val singleton : D.t -> Qstack.Make.t
        val is_empty : Qstack.Make.t -> bool
        val clear : Qstack.Make.t -> unit
        val add : D.t -> Qstack.Make.t -> unit
        val add_at_end : D.t -> Qstack.Make.t -> unit
        val top : Qstack.Make.t -> D.t
        val mem : D.t -> Qstack.Make.t -> bool
        val filter : (D.t -> bool) -> Qstack.Make.t -> D.t list
        val find : (D.t -> bool) -> Qstack.Make.t -> D.t
        val remove : D.t -> Qstack.Make.t -> unit
        val move_at_top : D.t -> Qstack.Make.t -> unit
        val move_at_end : D.t -> Qstack.Make.t -> unit
        val iter : (D.t -> unit) -> Qstack.Make.t -> unit
        val map : (D.t -> D.t) -> Qstack.Make.t -> unit
        val fold : ('-> D.t -> 'a) -> '-> Qstack.Make.t -> 'a
        val nth : int -> Qstack.Make.t -> D.t
        val length : Qstack.Make.t -> int
        val idx : D.t -> Qstack.Make.t -> int
      end
end