14.1Signatures and Units

The interface of a unit is described in terms of
signatures. Each signature is defined (normally within a
module) using define-signature. For example, the
following signature, placed in a "toy-factory-sig.rkt" file,
describes the exports of a component that implements a toy factory:

The toy-factory^ signature also could be referenced by a unit
that needs a toy factory to implement something else. In that case,
toy-factory^ would be named in an import clause.
For example, a toy store would get toys from a toy factory. (Suppose,
for the sake of an example with interesting features, that the store
is willing to sell only toys in a particular color.)

Note that "toy-store-unit.rkt" imports
"toy-factory-sig.rkt", but not
"simple-factory-unit.rkt". Consequently, the
[email protected] unit relies only on the specification of a toy
factory, not on a specific implementation.