Contracts in Guide: PLT Scheme introduces contracts.
The contract system guards one part of a program from
another. Programmers specify the behavior of a module exports via
provide/contract and the contract system enforces those
Contracts come in two forms: those constructed by the
various operations listed in this section of the manual, and various
ordinary Scheme values that double as contracts, including
symbols, booleans, characters, and
null, which are treated as contracts that recognize
themselves, using eq?,
strings and byte strings, which are treated as contracts
that recognize themselves using equal?,
numbers, which are treated as contracts
that recognize themselves using =,
regular expressions, which are treated as contracts that recognize byte strings and strings that match the regular expression, and
predicates: any procedure of arity 1 is treated as a
predicate. During contract checking, it is applied to the values that
appear and should return #f to indicate that the contract
failed, and anything else to indicate it passed.
The bindings documented in this section are provided by the scheme/contract and scheme libraries, but not scheme/base.