In programs that use units, modules like "toy-factory-sig.rkt" and "simple-factory-unit.rkt" are common. The racket/signature and racket/unit module names can be used as languages to avoid much of the boilerplate module, signature, and unit declaration text.
For example, "toy-factory-sig.rkt" can be written as
build-toys;(integer? -> (listof toy?))repaint;(toy? symbol? -> toy?)toy?;(any/c -> boolean?)toy-color;(toy? -> symbol?)
The signature toy-factory^ is automatically provided from the module, inferred from the filename "toy-factory-sig.rkt" by replacing the "-sig.rkt" suffix with ^.
Similarly, "simple-factory-unit.rkt" module can be written
(toy'blue)))(toycol))
The unit simple-factory@ is automatically provided from the module, inferred from the filename "simple-factory-unit.rkt" by replacing the "-unit.rkt" suffix with @.