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