The body must match the following module-body grammar:
See define-signature for the grammar of sig-elem. Unlike the body of a racket/unit module, a require in a racket/signature module must be a literal use of require .
The resulting signature is exported as base^, where base is derived from the enclosing module’s name (i.e., its symbolic name, or its path without the directory and file suffix). If the module name ends in -sig, then base corresponds to the module name before -sig. Otherwise, the module name serves as base.
A struct form as a sig-elem is consistent with the definitions introduced by define-struct , as opposed to definitions introduced by struct . (That behavior was originally a bug, but it is preserved for compatibility.)