diff --git a/collects/tests/typed-scheme/succeed/set-contract.rkt b/collects/tests/typed-scheme/succeed/set-contract.rkt new file mode 100644 index 0000000000..4d46eb6902 --- /dev/null +++ b/collects/tests/typed-scheme/succeed/set-contract.rkt @@ -0,0 +1,7 @@ +#lang typed/racket + +(define-predicate string-set? (Setof String)) + +(string-set? (set 1 2 3)) + +(string-set? (set "1" "2" "3")) \ No newline at end of file diff --git a/collects/typed-scheme/private/type-contract.rkt b/collects/typed-scheme/private/type-contract.rkt index ef7c558bda..03a90975cc 100644 --- a/collects/typed-scheme/private/type-contract.rkt +++ b/collects/typed-scheme/private/type-contract.rkt @@ -14,7 +14,7 @@ (private parse-type) racket/match unstable/match syntax/struct syntax/stx mzlib/trace racket/syntax scheme/list (only-in scheme/contract -> ->* case-> cons/c flat-rec-contract provide/contract any/c) - (for-template scheme/base racket/contract (utils any-wrap) + (for-template scheme/base racket/contract racket/set (utils any-wrap) (prefix-in t: (types numeric-predicates)) (only-in scheme/class object% is-a?/c subclass?/c object-contract class/c init object/c class?))) @@ -184,6 +184,7 @@ ([cnts (append (map t->c vars) (map t->c notvars))]) #'(or/c . cnts)))] [(and t (Function: _)) (t->c/fun t)] + [(Set: t) #`(set/c #,(t->c t))] [(Vector: t) (if flat? #`(vectorof #,(t->c t #:flat #t) #:flat? #t)