diff --git a/collects/typed-scheme/typecheck/tc-metafunctions.ss b/collects/typed-scheme/typecheck/tc-metafunctions.ss index cea9cb44..6487fb09 100644 --- a/collects/typed-scheme/typecheck/tc-metafunctions.ss +++ b/collects/typed-scheme/typecheck/tc-metafunctions.ss @@ -96,8 +96,8 @@ (-> LatentFilter/c Type/c Object? (or/c '() (list/c Filter/c))) (match* (lf s o) [((LBot:) _ _) (list (make-Bot))] - [((LNotTypeFilter: (? (lambda (t) (subtype s t))) (list) _) _ _) (list (make-Bot))] - [((LTypeFilter: (? (lambda (t) (not (overlap s t)))) (list) _) _ _) (list (make-Bot))] + [((LNotTypeFilter: (? (lambda (t) (subtype s t)) t) (list) _) _ _) (list (make-Bot))] + [((LTypeFilter: (? (lambda (t) (not (overlap s t))) t) (list) _) _ _) (list (make-Bot))] [(_ _ (Empty:)) null] [((LTypeFilter: t pi* _) _ (Path: pi x)) (list (make-TypeFilter t (append pi* pi) x))] [((LNotTypeFilter: t pi* _) _ (Path: pi x)) (list (make-NotTypeFilter t (append pi* pi) x))])) diff --git a/collects/typed-scheme/types/abbrev.ss b/collects/typed-scheme/types/abbrev.ss index 53729ed8..52c43d6f 100644 --- a/collects/typed-scheme/types/abbrev.ss +++ b/collects/typed-scheme/types/abbrev.ss @@ -191,8 +191,8 @@ (define-syntax-class c (pattern x:id #:when (eq? ': (syntax-e #'x)))) (syntax-parse stx - [(_ dom ... rng :c filters) - #'(->* (list dom ...) rng : filters)] + [(_ dom ... rng _:c filters _:c objects) + #'(->* (list dom ...) rng : filters : objects)] [(_ dom ... rng :c filters) #'(->* (list dom ...) rng : filters)] [(_ dom ... rng) diff --git a/collects/typed-scheme/types/remove-intersect.ss b/collects/typed-scheme/types/remove-intersect.ss index c7a1b219..0d76e51b 100644 --- a/collects/typed-scheme/types/remove-intersect.ss +++ b/collects/typed-scheme/types/remove-intersect.ss @@ -23,7 +23,7 @@ (ormap (lambda (t*) (overlap t t*)) e)] [(or (list _ (? Poly?)) (list (? Poly?) _)) #t] ;; these can have overlap, conservatively - [(list (Base: s1 _) (Base: s2 _)) (eq? s1 s2)] + [(list (Base: s1 _) (Base: s2 _)) (or (subtype t1 t2) (subtype t2 t1))] [(list (Base: _ _) (Value: _)) (subtype t2 t1)] ;; conservative [(list (Value: _) (Base: _ _)) (subtype t1 t2)] ;; conservative [(list (Syntax: t) (Syntax: t*))