7.7 Extending the Syntax of Signatures (original) (raw)

7.7 Extending the Syntax of Signatures🔗

(define-signature-form sig-form-id expr)
(define-signature-form (sig-form-id id) body ...+)
(define-signature-form (sig-form-id id intro-id) body ...+)

In the first form, the result of expr must be a transformer procedure that accepts one argument. In the second form, sig-form-id is bound to a transformer procedure whose argument is id and whose body is the bodys. The third form is like the second one, butintro-id is bound to a procedure that is analogous to syntax-local-introducefor the signature-form expansion.

The result of the transformer procedure must be a list of syntax objects, which are substituted for a use ofsig-form-id in a define-signature expansion. (The result is a list so that the transformer can produce multiple declarations; define-signature has no splicing beginform.)

Changed in version 8.1.0.7 of package base: Added support for the form with a transformerexpr.

(struct/ctc id ([field contract-expr] ...) struct-option ...)
field = id | [id #:mutable] struct-option = #:mutable #:omit-constructor #:omit-define-syntaxes #:omit-define-values

For use with define-signature. The struct/ctc form works similarly to struct, but the constructor, predicate, field accessors, and field mutators are contracted appropriately.