diff --git a/collects/tests/typed-scheme/succeed/pr10939.rkt b/collects/tests/typed-scheme/succeed/pr10939.rkt new file mode 100644 index 00000000..75e5fcfd --- /dev/null +++ b/collects/tests/typed-scheme/succeed/pr10939.rkt @@ -0,0 +1,8 @@ +#lang typed/scheme + +(define-type (T elem) + (U 'other a:empty)) + +(define-predicate a:list? (T Any)) + +(define-struct: a:empty ()) diff --git a/collects/tests/typed-scheme/succeed/pr11504.rkt b/collects/tests/typed-scheme/succeed/pr11504.rkt new file mode 100644 index 00000000..e319bab3 --- /dev/null +++ b/collects/tests/typed-scheme/succeed/pr11504.rkt @@ -0,0 +1,7 @@ +#lang typed/racket + +(define-type Animal (U cat dog)) +(define-predicate animal? Animal) + +(struct: cat ([lives : Natural])) +(struct: dog ([bark : Natural] [bite : Natural])) diff --git a/collects/typed-scheme/private/type-contract.rkt b/collects/typed-scheme/private/type-contract.rkt index d9f5331d..12b4fc26 100644 --- a/collects/typed-scheme/private/type-contract.rkt +++ b/collects/typed-scheme/private/type-contract.rkt @@ -40,7 +40,7 @@ #:typed-side #f #:flat flat? (lambda () (tc-error/stx prop "Type ~a could not be converted to a contract." typ)))]) - (syntax/loc stx (define-values (n) cnt))))] + (quasisyntax/loc stx (define-values (n) (recursive-contract cnt #,(if flat? #'#:flat #'#:impersonator))))))] [_ (int-err "should never happen - not a define-values: ~a" (syntax->datum stx))])) (define (change-contract-fixups forms)