▼ |  | Unstable

1 | Guidelines for developing unstable libraries
2 | Bytes
3 | Classes and Objects
4 | Contracts
5 | Definitions
6 | Dictionaries
7 | Directories
8 | Exceptions
9 | Filesystem
10 | Functions
11 | Lists
12 | Net
13 | Path
14 | PLane T Packages
15 | Ports
16 | Pretty-Printing
17 | Regular Expressions
18 | Requiring Modules
19 | Sandboxed Evaluation
20 | Scribble Documentation
21 | Sets
22 | S-Expression Diff
23 | Source Locations
24 | Strings
25 | Structs
26 | Syntax
27 | Planet Package Macros
28 | Text Representations
29 | Multiple Values
30 | XML and CSS
31 | Polymorphic Contracts
32 | Finding Mutated Variables
33 | Find
34 | Interface-Oriented Programming for Classes
35 | Sequences
36 | Hash Tables
37 | Match
38 | Generics
39 | Mark Parameters
40 | Debugging
41 | Contracts for macro subexpressions
42 | Contracts for struct type properties
43 | GUI libraries

On this page:

struct-type-property/ c

Version: 5.0.2
top ← prev up next →

### 42`` Contracts for struct type properties

Ryan Culpepper <ryanc@racket-lang.org>

( require unstable/prop-contract )

This library is unstable; compatibility will not be maintained. See Unstable for more information.

( struct-type-property/c value-contract) → contract?
value-contract : contract?

Produces a contract for struct type properties. When the contract is applied to a struct type property, it produces a wrapped struct type property. When the wrapped struct type property is used to create a new struct type (via struct, make-struct-type, etc), it applies value-contract to the value associated with the property.

The contract has no effect on the struct type property accessor.

Examples:

> ( define-values (prop prop? prop-ref)
( make-struct-type-property 'prop))

> ( define/contract wrapped
( struct-type-property/c ( -> any/c ( -> number? number? )))
prop)

> ( struct s (f)
#:property wrapped ( lambda (s) (s-f s)))

> ( define (get-f s) ((prop-ref s) s))
> ( define s1 (s add1 ))
> ((get-f s1) 5)
6
> ((get-f s1) 'apple)
eval:3.0: (definition wrapped) broke the contract
(struct-type-property/c
(-> any/c (-> number? number?)))
on wrapped; expected <number?>, given: 'apple
> ( define s2 (s ( lambda (n) ( if ( zero? n) 'zero 'nonzero))))
> ((get-f s2) 5)
eval:3.0: top-level broke the contract
(struct-type-property/c
(-> any/c (-> number? number?)))
on wrapped; expected <number?>, given: 'nonzero
> ((get-f s2) 'apple)
eval:3.0: (definition wrapped) broke the contract
(struct-type-property/c
(-> any/c (-> number? number?)))
on wrapped; expected <number?>, given: 'apple

top ← prev up next →