|
534 | 534 | (define (blame-add-cdr-context blame) (blame-add-context blame "the cdr of"))
|
535 | 535 |
|
536 | 536 |
|
537 |
| -(define ((val-first-ho-check combine) ctc) |
| 537 | +(define ((cons/c-val-first-ho-check combine) ctc) |
538 | 538 | (define ctc-car (the-cons/c-hd-ctc ctc))
|
539 | 539 | (define ctc-cdr (the-cons/c-tl-ctc ctc))
|
540 | 540 | (define car-val-first-proj (get/build-val-first-projection ctc-car))
|
|
550 | 550 | ((car-p (car v)) neg-party)
|
551 | 551 | ((cdr-p (cdr v)) neg-party))))))
|
552 | 552 |
|
| 553 | +(define ((cons/c-ho-check combine) ctc) |
| 554 | + (define ctc-car (the-cons/c-hd-ctc ctc)) |
| 555 | + (define ctc-cdr (the-cons/c-tl-ctc ctc)) |
| 556 | + (define car-proj (contract-projection ctc-car)) |
| 557 | + (define cdr-proj (contract-projection ctc-cdr)) |
| 558 | + (λ (blame) |
| 559 | + (let ([car-p (car-proj (blame-add-car-context blame))] |
| 560 | + [cdr-p (cdr-proj (blame-add-cdr-context blame))]) |
| 561 | + (λ (v) |
| 562 | + (unless (pair? v) |
| 563 | + (raise-not-cons-blame-error blame v)) |
| 564 | + (combine v (car-p (car v)) (cdr-p (cdr v))))))) |
| 565 | + |
553 | 566 | (define (cons/c-first-order ctc)
|
554 | 567 | (define ctc-car (the-cons/c-hd-ctc ctc))
|
555 | 568 | (define ctc-cdr (the-cons/c-tl-ctc ctc))
|
|
585 | 598 | #:property prop:custom-write custom-write-property-proc
|
586 | 599 | #:property prop:flat-contract
|
587 | 600 | (build-flat-contract-property
|
588 |
| - #:val-first-projection (val-first-ho-check (λ (v a d) v)) |
| 601 | + #:val-first-projection (cons/c-val-first-ho-check (λ (v a d) v)) |
| 602 | + #:projection (cons/c-ho-check (λ (v a d) v)) |
589 | 603 | #:name cons/c-name
|
590 | 604 | #:first-order cons/c-first-order
|
591 | 605 | #:stronger cons/c-stronger?
|
|
595 | 609 | #:property prop:chaperone-contract
|
596 | 610 | (parameterize ([skip-projection-wrapper? #t])
|
597 | 611 | (build-chaperone-contract-property
|
598 |
| - #:val-first-projection (val-first-ho-check (λ (v a d) (cons a d))) |
| 612 | + #:val-first-projection (cons/c-val-first-ho-check (λ (v a d) (cons a d))) |
| 613 | + #:projection (cons/c-ho-check (λ (v a d) (cons a d))) |
599 | 614 | #:name cons/c-name
|
600 | 615 | #:first-order cons/c-first-order
|
601 | 616 | #:stronger cons/c-stronger?
|
|
604 | 619 | #:property prop:custom-write custom-write-property-proc
|
605 | 620 | #:property prop:contract
|
606 | 621 | (build-contract-property
|
607 |
| - #:val-first-projection (val-first-ho-check (λ (v a d) (cons a d))) |
| 622 | + #:val-first-projection (cons/c-val-first-ho-check (λ (v a d) (cons a d))) |
| 623 | + #:projection (cons/c-ho-check (λ (v a d) (cons a d))) |
608 | 624 | #:name cons/c-name
|
609 | 625 | #:first-order cons/c-first-order
|
610 | 626 | #:stronger cons/c-stronger?
|
|
0 commit comments