reprovide-lang
1 #lang reprovide
#%module-begin
2 reprovide as a macro
reprovide
3 Extra require forms
3.1 Require with fallbacks
combine-in/  fallback
allow-in
3.2 Require by glob
glob-in
8.12

reprovide-lang🔗ℹ

1 #lang reprovide🔗ℹ

A #lang language for reproviding modules.

For example, a module that reprovided racket/match and racket/list at runtime, and provided racket/base and syntax/parse for-syntax would look like this:
#lang reprovide
racket/match
racket/list
(for-syntax racket/base
            syntax/parse)

syntax

(#%module-begin require-spec ...)

Expands to the form (reprovide require-spec ...) within racket/base’s #%module-begin form.

2 reprovide as a macro🔗ℹ

This module provides reprovide as a macro.

syntax

(reprovide require-spec ...)

This form requires each require-spec and provides everything imported from all of them.

3 Extra require forms🔗ℹ

3.1 Require with fallbacks🔗ℹ

 (require reprovide/require-transformer/combine-in-fallback)
  package: reprovide-lang-lib

These forms are provided by both #lang reprovide and reprovide/require-transformer/combine-in-fallback.

syntax

(combine-in/fallback require-spec ...)

The union of the require-specs, where imports not in the first ones can "fall back" on imports in subsequent ones.

Like (combine-in require-spec ...), but more lenient when imports from the require-specs have the same identifier name: the first ones take precedence over the subsequent ones.

syntax

(allow-in require-spec id-maybe-renamed ...)

 
id-maybe-renamed = id
  | [orig-id bind-id]
Like (only-in require-spec id-maybe-renamed ...), but more lenient when id or orig isn’t in the require-spec.

These can be used together to import an identifier if it exists, but fall back on a different identifier otherwise:
(require (combine-in/fallback
          (allow-in racket/unsafe/ops
                    [unsafe-f32vector-set! unsafe?-f32vector-set!])
          (allow-in ffi/vector
                    [f32vector-set! unsafe?-f32vector-set!])))

3.2 Require by glob🔗ℹ

 (require reprovide/require-transformer/glob-in)
  package: reprovide-lang-lib

These forms are provided by both #lang reprovide and reprovide/require-transformer/glob-in.

syntax

(glob-in glob-str ...)

Examples:

(require (glob-in "directory/*.rkt"))
requires every file ending in .rkt in the given directory.

(require (glob-in "directory/*.{rkt,scrbl}"))
requires every file ending in .rkt or .scrbl in the given directory.

(require (glob-in "{linear,affine}/{data,transformation,decomposition}.rkt"))
requires six things, according to every combination of options:
  • linear/data.rkt

  • linear/transformation.rkt

  • linear/decomposition.rkt

  • affine/data.rkt

  • affine/transformation.rkt

  • affine/decomposition.rkt

The syntax for each glob-str is described in Globbing.