The racket/phase+space library provides functions for manipulating combined representations of phase levels and binding spaces, particularly as used for require transformers and provide transformers.
When identifier-binding (and related functions, like identifier-transformer-binding ), syntax-local-module-exports , syntax-local-module-required-identifiers , module-compiled-exports , or module->exports produces a phase–space combination (or phase–space shift combination), then two such values that are equal? will be eqv? .
Added in version 8.2.0.3 of package base.
procedure
( phase+space? v)→boolean?
v:any/c
a phase (in the sense of phase? ) by itself, which represents that phase plus the default binding space
a pair whose car is a phase and whose cdr is a non-#f space (in the sense of space? )
procedure
( phase+space phasespace)→phase+space?
phase:phase?space:space?
procedure
( phase+space-phase p+s)→phase?
p+s:phase+space?procedure
( phase+space-space p+s)→phase?
p+s:phase+space?
procedure
v:any/c
exact integer — represents an amount to shift a phase level and no change to the binding space
#f — represents a shift to the label phase level and no change to the binding space
a pair whose car is an exact integer or #f, and whose cdr is a space (in the sense of space? ) — represents a phase level shift in the car and a change to the binding space that is in the cdr
procedure
( phase+space+ p+sshift)→phase+space?
p+s:phase+space?shift:phase+space-shift?
procedure
( phase+space-shift+ shiftadditional-shift)→phase+space-shift?
shift:phase+space?additional-shift:phase+space-shift?