diff --git a/collects/tests/typed-racket/succeed/for-set.rkt b/collects/tests/typed-racket/succeed/for-set.rkt new file mode 100644 index 00000000..6129a30d --- /dev/null +++ b/collects/tests/typed-racket/succeed/for-set.rkt @@ -0,0 +1,3 @@ +#lang typed/racket +(for ([i (set 1 2 3)]) + (displayln i)) diff --git a/collects/tests/typed-racket/unit-tests/subtype-tests.rkt b/collects/tests/typed-racket/unit-tests/subtype-tests.rkt index 8e813fb9..64b25535 100644 --- a/collects/tests/typed-racket/unit-tests/subtype-tests.rkt +++ b/collects/tests/typed-racket/unit-tests/subtype-tests.rkt @@ -78,6 +78,7 @@ [(-val 6) -Number] [(-val 'hello) -Symbol] + [(-set -Number) (make-Sequence (list -Number))] [((Un -Symbol -Number) . -> . -Number) (-> -Number -Number)] [(-poly (t) (-> -Number t)) (-mu t (-> -Number t))] ;; not subtypes diff --git a/collects/typed-racket/infer/infer-unit.rkt b/collects/typed-racket/infer/infer-unit.rkt index aaa6af5b..76db5634 100644 --- a/collects/typed-racket/infer/infer-unit.rkt +++ b/collects/typed-racket/infer/infer-unit.rkt @@ -474,6 +474,8 @@ (cg t t*)] [((Hashtable: k v) (Sequence: (list k* v*))) (cgen/list V X Y (list k v) (list k* v*))] + [((Set: t) (Sequence: (list t*))) + (cg t t*)] ;; ListDots can be below a Listof ;; must be above mu unfolding [((ListDots: s-dty dbound) (Listof: t-elem)) diff --git a/collects/typed-racket/types/subtype.rkt b/collects/typed-racket/types/subtype.rkt index b9e1a389..b9582d40 100644 --- a/collects/typed-racket/types/subtype.rkt +++ b/collects/typed-racket/types/subtype.rkt @@ -299,6 +299,8 @@ (subtype* A0 -Nat t*)] [((Hashtable: k v) (Sequence: (list k* v*))) (subtypes* A0 (list k v) (list k* v*))] + [((Set: t) (Sequence: (list t*))) + (subtype* A0 t t*)] ;; special-case for case-lambda/union with only one argument [((Function: arr1) (Function: (list arr2))) (when (null? arr1) (fail! s t))