diff --git a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/typecheck/tc-apply.rkt b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/typecheck/tc-apply.rkt index a2a58cc9..ca8e6bef 100644 --- a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/typecheck/tc-apply.rkt +++ b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/typecheck/tc-apply.rkt @@ -183,14 +183,14 @@ ;; ... function, (Listof A) or (List A B C etc) arg [(and drest (not tail-bound) (eq? (cdr drest) dotted-var) - (= (length domain) (length arg-tys)) + (<= (length domain) (length arg-tys)) (match full-tail-ty [(List: tail-arg-tys #:tail (Listof: tail-arg-ty)) (infer/vararg fixed-vars (list dotted-var) - (cons tail-arg-ty (append tail-arg-tys arg-tys)) - (cons (car drest) (append (map (λ _ (car drest)) tail-arg-tys) domain)) - rest + (cons tail-arg-ty (append arg-tys tail-arg-tys)) + (cons (car drest) domain) + (car drest) range)] [(List: tail-arg-tys) (infer/dots fixed-vars dotted-var (append arg-tys tail-arg-tys) domain diff --git a/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/unit-tests/typecheck-tests.rkt b/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/unit-tests/typecheck-tests.rkt index f1733ad5..ef4d6222 100644 --- a/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/unit-tests/typecheck-tests.rkt +++ b/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/unit-tests/typecheck-tests.rkt @@ -2859,6 +2859,13 @@ #:ret (ret (->* (list) Univ Univ)) #:expected (ret (->* (list) Univ Univ))] + [tc-e + (let: ([f : (All (b ...) (Any ... b -> Any)) (lambda x 'x)]) + (lambda xs (apply f 'y xs))) + #:ret (ret (->* (list) Univ Univ)) + #:expected (ret (->* (list) Univ Univ))] + + [tc-e (let () (: a Symbol)