require-typed-check
(require require-typed-check) | |
package: require-typed-check |
syntax
(require/typed/check m rt-clause ...)
If you cannot know ahead of time whether m is typed or untyped but want to avoid Typed-Racket-generated contracts if m happens to be typed, this macro is worth using. Otherwise, just use require or require/typed.
All submodules of the current module are assumed untyped. The current implementation would need to compile the module’s submodules to be sure; it breaks the circular dependency by assuming the worst.
Any #:opaque imports are required via require/typed. (Previously, they weren’t imported at all —
now they’re imported under contract.)
> (module t typed/racket (require require-typed-check) (require/typed/check racket/math ((sqr square) (-> Integer Integer))) (require/typed racket/contract (has-contract? (-> Any Boolean))) (define (check-contract id) (printf "~a does~a have a contract~n" (object-name id) (if (has-contract? id) "" " NOT"))) (check-contract square) (check-contract has-contract?)) > (require 't)
sqr does NOT have a contract
has-contract? does have a contract
1 Type-Boundary Instrumentation
To disable require/typed/check, set the environment variable DISABLE_REQUIRE_TYPED_CHECK to any kind of value. This causes all require/typed/check forms to expand to require/typed forms.
Log events report the importing module and the syntax of the require/typed/check form. This data is package in an instance of a prefab struct:
struct
(struct require-typed-check-info (src sexp) #:prefab) src : string? sexp : any/c