generic
    type Item is private;
package Stack_Sequential_Unbounded_Controlled_Noniterator is

    type Stack is limited private;

    procedure Copy (From_The_Stack : in Stack; To_The_Stack : in out Stack);
    procedure Clear (The_Stack : in out Stack);
    procedure Push (The_Item : in Item; On_The_Stack : in out Stack);
    procedure Pop (The_Stack : in out Stack);

    function Is_Equal (Left : in Stack; Right : in Stack) return Boolean;
    function Depth_Of (The_Stack : in Stack) return Natural;
    function Is_Empty (The_Stack : in Stack) return Boolean;
    function Top_Of (The_Stack : in Stack) return Item;

    Overflow : exception;
    Underflow : exception;

private
    type Node;
    type Stack is access Node;
end Stack_Sequential_Unbounded_Controlled_Noniterator;