2.5 KiB
Exports: provide
By default, all of a module’s definitions are private to the module. The
provide
form specifies definitions to be made available where the
module is require
d.
(provide provide-spec ...)
A provide
form can only appear at module level (i.e., in the
immediate body of a module
). Specifying multiple provide-spec
s in
a single provide
is exactly the same as using multiple provide
s each
with a single provide-spec
.
Each identifier can be exported at most once from a module across all
provide
s within the module. More precisely, the external name for each
export must be distinct; the same internal binding can be exported
multiple times with different external names.
The allowed shape of a provide-spec
is defined recursively:
identifier
In its simplest form, a provide-spec
indicates a binding within its
module to be exported. The binding can be from either a local
definition, or from an import.
(rename-out [orig-id export-id] ...)
A rename-out
form is similar to just specifying an identifier, but the
exported binding orig-id
is given a different name, export-id
, to
importing modules.
(struct-out struct-id)
A struct-out
form exports the bindings created by (struct struct-id ....)
.
+See [missing] for information on
define-struct
.
(all-defined-out)
The all-defined-out
shorthand exports all bindings that are defined
within the exporting module as opposed to imported
.
Use of the all-defined-out
shorthand is generally discouraged, because
it makes less clear the actual exports for a module, and because Racket
programmers get into the habit of thinking that definitions can be added
freely to a module without affecting its public interface (which is not
the case when all-defined-out
is used).
(all-from-out module-path)
The all-from-out
shorthand exports all bindings in the module that
were imported using a require-spec
that is based on module-path
.
Although different module-path
s could refer to the same file-based
module, re-exporting with all-from-out
is based specifically on the
module-path
reference, and not the module that is actually referenced.
(except-out provide-spec id ...)
Like provide-spec
, but omitting the export of each id
, where id
is
the external name of the binding to omit.
(prefix-out prefix-id provide-spec)
Like provide-spec
, but adding prefix-id
to the beginning of the
external name for each exported binding.