diff --git a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/types/match-expanders.rkt b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/types/match-expanders.rkt index 72eda3b3..012b37fd 100644 --- a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/types/match-expanders.rkt +++ b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/types/match-expanders.rkt @@ -48,10 +48,10 @@ (define-match-expander MListof: (lambda (stx) (syntax-parse stx - [(_ elem-pat) + [(_ elem-pat (~optional var-pat #:defaults ([var-pat #'var]))) ;; see note above - #'(or (Mu: var (Union: (list (Value: '()) (MPair: elem-pat (F: var))))) - (Mu: var (Union: (list (MPair: elem-pat (F: var)) (Value: '())))))]))) + #'(or (Mu: var-pat (Union: (list (Value: '()) (MPair: elem-pat (F: var-pat))))) + (Mu: var-pat (Union: (list (MPair: elem-pat (F: var-pat)) (Value: '())))))]))) (define (unpoly t) (match t diff --git a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/types/printer.rkt b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/types/printer.rkt index e8f0484b..e441700e 100644 --- a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/types/printer.rkt +++ b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/types/printer.rkt @@ -432,10 +432,14 @@ [(Continuation-Mark-KeyTop:) 'Continuation-Mark-KeyTop] [(App: rator rands stx) (list* (type->sexp rator) (map type->sexp rands))] - ;; special cases for lists - [(Listof: elem-ty) + ;; Special cases for lists. Avoid printing with these cases if the + ;; element type refers to the Mu variable (otherwise it prints the + ;; type variable with no binding). + [(Listof: elem-ty var) + #:when (not (memq var (fv elem-ty))) `(Listof ,(t->s elem-ty))] - [(MListof: elem-ty) + [(MListof: elem-ty var) + #:when (not (memq var (fv elem-ty))) `(MListof ,(t->s elem-ty))] ;; format as a string to preserve reader abbreviations and primitive ;; values like characters (when `display`ed) diff --git a/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/unit-tests/type-printer-tests.rkt b/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/unit-tests/type-printer-tests.rkt index bbc1a0ff..4af5eb9f 100644 --- a/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/unit-tests/type-printer-tests.rkt +++ b/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/unit-tests/type-printer-tests.rkt @@ -47,6 +47,12 @@ (check-prints-as? (make-Mu 'x (Un -Null (-pair -Nat (make-F 'x)))) "(Listof Nonnegative-Integer)") (check-prints-as? (-lst* -String -Symbol) "(List String Symbol)") + + ;; next three cases for PR 14552 + (check-prints-as? (-mu x (Un (-pair x x) -Null)) "(Rec x (U Null (Pairof x x)))") + (check-prints-as? (-mu x (Un (-pair (-box x) x) -Null)) "(Rec x (U Null (Pairof (Boxof x) x)))") + (check-prints-as? (-mu x (Un (-mpair x x) -Null)) "(Rec x (U Null (MPairof x x)))") + (check-prints-as? -Custodian "Custodian") (check-prints-as? (make-Opaque #'integer?) "(Opaque integer?)") (check-prints-as? (make-Vector -Nat) "(Vectorof Nonnegative-Integer)")