generic

  type KeyType is private;
  type ElementType is private;
  type IndexType is range <>;   -- integer subscripts
  type ListType is array (IndexType range <>) of ElementType;
  with function KeyOf  (Element: ElementType) return KeyType is <>;
  with function "<"(Left, Right: KeyType) return Boolean is <>;

  with procedure Put(List: ListType); -- for debugging

procedure Sort_Merge_Generic(List: in out ListType);
------------------------------------------------------------------------
--| Pre:  The procedure has been instantiated and List is defined
--| Post: The contents of List are in order defined by "<"     
--| Author: Michael B. Feldman, The George Washington University 
--| Last Modified: January 1996                                     
------------------------------------------------------------------------