Packages are program units that
allow the specification of groups of logically related entities. Typically,
a package contains the declaration of a type (often a private type or
private extension) along with the declarations of primitive subprograms
of the type, which can be called from outside the package, while their
inner workings remain hidden from outside users.