with ada.text_io; use ada.text_io; 
with ada.integer_text_io; use ada.integer_text_io;

--  Generic packages
with stackpkg;
with stackpkg.utils;
procedure trystack2 is
    -- This method is defined so that we can pass it to the generic
    procedure myIntPut(i: integer) is
    begin
        ada.integer_text_io.put(i);
    end myIntPut;

    --  Instantiate generic package for integers
    package intstack is new stackpkg(100, integer);
    use intstack;

    --  Instantiate child generic package for integers
    --  Pass in myIntPut to print an integer
    package intstackutils is
       new intstack.utils(print_item => myIntPut);
    use intstackutils;

    -- We can't pass ada.integer_text_io above directly because it has
    -- default parameters (ie it has three, not one, parameter)
    -- so we pass myIntPut which has one param, which matches the
    -- generic parameter

    s: intstack.stack;

begin
    push(10, s);
    push(20, s);

    intstackutils.print_stack (s); new_line;

    put_line(size(s)'img);

    pop(s);

    print_stack (s); new_line;

end trystack2;