generic type Component is private; type List_Index is range <>; type List is array (List_Index range <>) of Component; Default_Value : Component; -- with function "=" (Left, Right : List) return Boolean is <>; package Equal8_Pkg is pragma Pure; Maximum_Length : constant List_Index := List_Index'Last; subtype Natural_Index is List_Index'Base range 0 .. Maximum_Length; type Sequence (Capacity : Natural_Index) is private; -- from zero to Capacity. function Value (This : Sequence) return List; -- Returns the content of this sequence. The value returned is the -- "logical" value in that only that slice which is currently assigned -- is returned, as opposed to the entire physical representation. overriding function "=" (Left, Right : Sequence) return Boolean with Inline; function "=" (Left : Sequence; Right : List) return Boolean with Inline; private type Sequence (Capacity : Natural_Index) is record Current_Length : Natural_Index := 0; Content : List (1 .. Capacity) := (others => Default_Value); end record; ----------- -- Value -- ----------- function Value (This : Sequence) return List is (This.Content (1 .. This.Current_Length)); --------- -- "=" -- --------- overriding function "=" (Left, Right : Sequence) return Boolean is (Value (Left) = Value (Right)); --------- -- "=" -- --------- function "=" (Left : Sequence; Right : List) return Boolean is (Value (Left) = Right); end Equal8_Pkg;