generic
    type Item is private;
    type File is limited private;
    with procedure Open_For_Reading (The_File : in out File);
    with procedure Open_For_Writing (The_File : in out File);
    with procedure Get (The_File : in out File; The_Item : out Item);
    with procedure Put (The_File : in out File; The_Item : in Item);
    with procedure Close (The_File : in out File);
    with function Next_Item (The_File : in File) return Item;
    with function "<" (Left : in Item; Right : in Item) return Boolean;
    with function Is_End_Of_File (The_File : in File) return Boolean;
package Natural_Merge_Sort is

    procedure Sort (The_File : in out File;
                    Temporary_File_1 : in out File;
                    Temporary_File_2 : in out File);

    File_Is_Empty : exception;

end Natural_Merge_Sort;