diff --git a/collects/tests/typed-scheme/succeed/for-lists.ss b/collects/tests/typed-scheme/succeed/for-lists.ss new file mode 100644 index 00000000..2cd02058 --- /dev/null +++ b/collects/tests/typed-scheme/succeed/for-lists.ss @@ -0,0 +1,6 @@ +#lang typed-scheme + +(: f ((Listof Number) -> (Listof Number))) +(define (f x) + (for/lists (#{y : (Listof Number)}) ([e (in-list x)]) + e)) diff --git a/collects/tests/typed-scheme/succeed/match-tests.ss b/collects/tests/typed-scheme/succeed/match-tests.ss new file mode 100644 index 00000000..3686d07c --- /dev/null +++ b/collects/tests/typed-scheme/succeed/match-tests.ss @@ -0,0 +1,9 @@ +#lang typed-scheme + +(require scheme/match) + +(match "abc" + [(regexp "^abc") 1]) + +(match (list 1 1) + [(list x x) 1]) diff --git a/collects/typed-scheme/typecheck/tc-app-unit.ss b/collects/typed-scheme/typecheck/tc-app-unit.ss index f3a951e8..698e3c9c 100644 --- a/collects/typed-scheme/typecheck/tc-app-unit.ss +++ b/collects/typed-scheme/typecheck/tc-app-unit.ss @@ -811,7 +811,12 @@ (ret expected))] ;; special case when argument needs inference [_ - (let ([ts (map (compose generalize tc-expr/t) (syntax->list actuals))]) + (let ([ts (for/list ([ac (syntax->list actuals)] + [f (syntax->list args)]) + (or + (type-annotation f #:infer #t) + (generalize (tc-expr/t ac))))]) + (printf "case 2 ~a~n" ts) (tc/rec-lambda/check form args body lp ts expected) (ret expected))]))