Version: 4.2.1

7 Contracts

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 constraints.

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.

    7.1 Data-structure Contracts

    7.2 Function Contracts

    7.3 Lazy Data-structure Contracts

    7.4 Attaching Contracts to Values

    7.5 Building New Contract Combinators

    7.6 Contract Utilities