package C_Words is type Comparable is limited interface; type Word (<>) is tagged private; function New_Word (Str : String) return Word; type C_Word (<>) is new Word and Comparable with private; function New_Word (Str : String) return C_Word; private type Word (Length : Natural) is tagged record Str : String (1 .. Length) := (others => ' '); end record; type C_Word is new Word and Comparable with null record; end C_Words;