From 6abadc472edab7cccc6fc5db16f292fdfca88f90 Mon Sep 17 00:00:00 2001 From: Ben Greenman Date: Mon, 12 Nov 2018 12:50:13 -0500 Subject: [PATCH] doc: new examples for parametric->/c --- .../scribblings/reference/contracts.scrbl | 37 +++++++++++++++---- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/pkgs/racket-doc/scribblings/reference/contracts.scrbl b/pkgs/racket-doc/scribblings/reference/contracts.scrbl index d26c43faf2..8a1d4424b2 100644 --- a/pkgs/racket-doc/scribblings/reference/contracts.scrbl +++ b/pkgs/racket-doc/scribblings/reference/contracts.scrbl @@ -1577,14 +1577,35 @@ are checked for the appropriate wrapper. If they have it, they are unwrapped; if they do not, a contract violation is signaled. @examples[#:eval (contract-eval) #:once -(define/contract (check x y) - (parametric->/c [X] (boolean? X . -> . X)) - (if (or (not x) (equal? y 'surprise)) - 'invalid - y)) -(check #t 'ok) -(eval:error (check #f 'ignored)) -(check #t 'surprise) +(define swap-ctc (parametric->/c [A B] (-> A B (values B A)))) + +(define/contract (good-swap a b) + swap-ctc + (values b a)) + +(good-swap 1 2) + + +(define/contract (bad-swap a b) + swap-ctc + (values a b)) + +(eval:error (bad-swap 1 2)) + + +(define/contract (copy-first a _b) + swap-ctc + (values a a)) + +(eval:error (let ((v 'same-symbol)) (copy-first v v))) + +(define/contract (inspect-first a b) + swap-ctc + (if (integer? a) + (+ a b) + (raise-user-error "an opaque wrapped value is not an integer"))) + +(eval:error (inspect-first 1 2)) ] }