13 mzlib/contract

▼ |  | Mz Lib: Legacy Racket Libraries

1 | mzlib/ a-signature
2 | mzlib/ a-unit
3 | mzlib/ async-channel
4 | mzlib/ awk
5 | mzlib/ class
6 | mzlib/ class100
7 | mzlib/ cm
8 | mzlib/ cm-accomplice
9 | mzlib/ cmdline
10 | mzlib/ cml
11 | mzlib/ compat
12 | mzlib/ compile
13 | mzlib/ contract
14 | mzlib/ control
15 | mzlib/ date
16 | mzlib/ deflate
17 | mzlib/ defmacro
18 | mzlib/ etc
19 | mzlib/ file
20 | mzlib/ for
21 | mzlib/ foreign
22 | mzlib/ include
23 | mzlib/ inflate
24 | mzlib/ integer-set
25 | mzlib/ kw
26 | mzlib/ list
27 | mzlib/ match
28 | mzlib/ math
29 | mzlib/ md5
30 | mzlib/ os
31 | mzlib/ pconvert
32 | mzlib/ pconvert-prop
33 | mzlib/ plt-match
34 | mzlib/ port
35 | mzlib/ pregexp
36 | mzlib/ pretty
37 | mzlib/ process
38 | mzlib/ restart
39 | mzlib/ runtime-path
40 | mzlib/ sandbox
41 | mzlib/ sendevent
42 | mzlib/ serialize
43 | mzlib/ shared
44 | mzlib/ string
45 | mzlib/ struct
46 | mzlib/ stxparam
47 | mzlib/ surrogate
48 | mzlib/ tar
49 | mzlib/ thread
50 | mzlib/ trace
51 | mzlib/ traceld
52 | mzlib/ trait
53 | mzlib/ transcr
54 | mzlib/ unit
55 | mzlib/ unit-exptime
56 | mzlib/ unit200
57 | mzlib/ unitsig200
58 | mzlib/ zip
| Bibliography
| Index

On this page:

define/ contract

top← prev up next →

( require mzlib/contract)

This library is designed as a backwards compatible library for old uses of contracts. It should not be used for new libraries; use scheme/contract instead.

The main differences: the function contract syntax is more regular and function contracts now support keywords, and union is now or/c.

The mzlib/contract library re-exports many bindings from scheme/contract:

| </c |  | guilty-party
| <=/c |  | integer-in
| =/c |  | list/c
| >/c |  | listof
| >=/c |  | make-none/c
| and/c |  | make-proj-contract
| any |  | natural-number/c
| any/c |  | none/c
| between/c |  | not/c
| box-immutable/c |  | one-of/c
| box/c |  | or/c
| build-compound-type-name |  | parameter/c
| coerce-contract |  | printable/c
| cons/c |  | promise/c
| contract |  | provide/contract
| contract-first-order-passes? |  | raise-contract-error
| contract-violation->string |  | real-in
| contract? |  | recursive-contract
| define-contract-struct |  | string/len
| false/c |  | struct/c
| flat-contract |  | symbols
| flat-contract-predicate |  | syntax/c
| flat-contract? |  | vector-immutable/c
| flat-murec-contract |  | vector-immutableof
| flat-named-contract |  | vector/c
| flat-rec-contract |  | vectorof

It also provides the old version of define/contract:

( define/contract id contract-expr init-value-expr)

Attaches the contract contract-expr to init-value-expr and binds that to id.

The define/contract form treats individual definitions as units of blame. The definition itself is responsible for positive (co-variant) positions of the contract and each reference to id (including those in the initial value expression) must meet the negative positions of the contract.

Error messages with define/contract are not as clear as those provided by provide/contract, because define/contract cannot detect the name of the definition where the reference to the defined variable occurs. Instead, it uses the source location of the reference to the variable as the name of that definition.

top← prev up next →