sig
  exception OVERFLOW
  type 'a stack
  val create : '-> 'Stack.stack
  val clear : 'Stack.stack -> unit
  val is_empty : 'Stack.stack -> bool
  val size : 'Stack.stack -> int
  val push : 'Stack.stack -> '-> unit
  val top : 'Stack.stack -> 'a
  val pop : 'Stack.stack -> 'a
  val remove_top : 'Stack.stack -> unit
  val iter : ('-> unit) -> 'Stack.stack -> unit
  val fold : ('-> '-> 'a) -> '-> 'Stack.stack -> 'a
  val iter_stop : ('-> unit) -> ('-> bool) -> 'Stack.stack -> unit
  val map : ('-> 'a) -> 'Stack.stack -> 'Stack.stack
  val sort : ('-> '-> int) -> 'Stack.stack -> unit
  val find : 'Stack.stack -> ('-> int) -> 'a
end