The two abstract actions in this design do not have comparable actions in the LibraryList package. The NumberInList function returns the number of elements which are currently stored in the list, and the NewList function returns a new empty list which, for a bounded list only, has a limit on the number of elements which it can contain. This limitation is expressed as an optional parameter which can be omitted for an unbounded list. The package specification for this design is as follows. The IsListFull function is declared abstract as a future refinement to the hierarchy will introduce a fundamental division between bounded and unbounded lists.
Bounded lists have a limit on the number of items which they can contain and thus can become full.
Unbounded lists do not have such a limitation and thus can never become full. Each division will have to implement an IsListFull function before any non-abstract types can be declared. In the case of bounded lists this will be an actual implementation, but for unbounded lists a dummy implementation which always returns false, as an additional element can always be added, will be supplied. The NewList function is declared abstract for a similar reason. When a bounded list is declared a limit upon the size of the list has to be specified, however an unbounded list will have no such limit.