require-typed-check
require/  typed/  check
1 Type-Boundary Instrumentation
require-typed-check-logger
require-typed-check-info
7.0

require-typed-check

 (require require-typed-check)
  package: require-typed-check

syntax

(require/typed/check m rt-clause ...)

Like require/typed, but expands to a (require (only-in m ...)) when m is a Typed Racket module.

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.

Known limitations:
  • 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.)

Examples:
> (module t typed/racket
    (require require-typed-check)
    (require/typed/check math
      (divides? (-> Integer Integer Boolean)))
    (require/typed/check 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 divides?)
    (check-contract has-contract?))
> (require 't)

divides? 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.

Expanding a require/typed/check form logs an event to the 'require-typed-check topic.

A logger for require-typed-check.

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
Contains the source and value of a require/typed/check syntax object. The source src comes from syntax-source and the value sexp comes from syntax->datum.