diff --git a/typed-racket-lib/typed-racket/types/remove-intersect.rkt b/typed-racket-lib/typed-racket/types/remove-intersect.rkt index 22ca317f..f97fd534 100644 --- a/typed-racket-lib/typed-racket/types/remove-intersect.rkt +++ b/typed-racket-lib/typed-racket/types/remove-intersect.rkt @@ -88,8 +88,8 @@ [(list (Struct: n #f flds _ _ _) (StructTop: (Struct: n* #f flds* _ _ _))) #f] - [(list (and t1 (Struct: _ _ _ _ _ _)) - (and t2 (Struct: _ _ _ _ _ _))) + [(list (and t1 (Struct: _ _ _ _ #f _)) + (and t2 (Struct: _ _ _ _ #f _))) (or (subtype t1 t2) (subtype t2 t1))] [else #t])]))) diff --git a/typed-racket-test/succeed/gh-issue-205.rkt b/typed-racket-test/succeed/gh-issue-205.rkt new file mode 100644 index 00000000..f845b743 --- /dev/null +++ b/typed-racket-test/succeed/gh-issue-205.rkt @@ -0,0 +1,14 @@ +#lang typed/racket + +;; A test for GH issue #205 + +(struct (A) foo ([x : A])) + +(struct (A) baz foo ()) + +(define (f [i : Integer]) : (foo Integer) + (baz i)) + +(require typed/rackunit) + +(check-equal? (if (baz? (f 1)) 1 2) 1)