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