diff --git a/collects/typed-scheme/main.rkt b/collects/typed-scheme/main.rkt index c135bc5170..eb46ac9752 100644 --- a/collects/typed-scheme/main.rkt +++ b/collects/typed-scheme/main.rkt @@ -2,7 +2,7 @@ -(providing (libs (except scheme/base #%module-begin #%top-interaction with-handlers lambda #%app) +(providing (libs (except scheme/base #%module-begin #%top-interaction with-handlers lambda #%app for for*) (except "private/prims.rkt") (except "private/base-types.rkt") (except "private/base-types-extra.rkt")) @@ -18,4 +18,4 @@ (for-syntax "private/base-types-extra.rkt")) (provide (rename-out [with-handlers: with-handlers]) (for-syntax (all-from-out "private/base-types-extra.rkt")) - assert with-type) + assert with-type for for*) diff --git a/collects/typed-scheme/private/prims.rkt b/collects/typed-scheme/private/prims.rkt index 522ee9623b..c30c941915 100644 --- a/collects/typed-scheme/private/prims.rkt +++ b/collects/typed-scheme/private/prims.rkt @@ -23,7 +23,9 @@ This file defines two sorts of primitives. All of them are provided into any mod : (rename-out [define-typed-struct define-struct:] [lambda: λ:] - [define-typed-struct/exec define-struct/exec:])) + [define-typed-struct/exec define-struct/exec:] + [for/annotation for] + [for*/annotation for*])) (require "../utils/utils.rkt" racket/base @@ -427,6 +429,18 @@ This file defines two sorts of primitives. All of them are provided into any mod c ...) ty))])) +;; wrap the original for with a type annotation +(define-syntax (for/annotation stx) + (syntax-parse stx + [(_ x ...) + (syntax/loc stx + (ann (for x ...) Void))])) +(define-syntax (for*/annotation stx) + (syntax-parse stx + [(_ x ...) + (syntax/loc stx + (ann (for* x ...) Void))])) + ;; we need handle #:when clauses manually because we need to annotate ;; the type of each nested for (define-syntax (for: stx) diff --git a/collects/typed/racket/base.rkt b/collects/typed/racket/base.rkt index b728ae5f19..a98b88cd2e 100644 --- a/collects/typed/racket/base.rkt +++ b/collects/typed/racket/base.rkt @@ -2,7 +2,7 @@ -(providing (libs (except racket/base #%module-begin #%top-interaction with-handlers lambda #%app define-struct) +(providing (libs (except racket/base #%module-begin #%top-interaction with-handlers lambda #%app define-struct for for*) (except typed-scheme/private/prims) (except typed-scheme/private/base-types) (except typed-scheme/private/base-types-extra)) @@ -18,5 +18,5 @@ (for-syntax typed-scheme/private/base-types-extra)) (provide (rename-out [with-handlers: with-handlers] [define-type-alias define-type]) - assert with-type + assert with-type for for* (for-syntax (all-from-out typed-scheme/private/base-types-extra))) diff --git a/collects/typed/scheme/base.rkt b/collects/typed/scheme/base.rkt index 2a751ed865..20d6f35627 100644 --- a/collects/typed/scheme/base.rkt +++ b/collects/typed/scheme/base.rkt @@ -2,7 +2,7 @@ -(providing (libs (except scheme/base #%module-begin #%top-interaction with-handlers lambda #%app define-struct) +(providing (libs (except scheme/base #%module-begin #%top-interaction with-handlers lambda #%app define-struct for for*) (except typed-scheme/private/prims) (except typed-scheme/private/base-types) (except typed-scheme/private/base-types-extra)) @@ -18,5 +18,5 @@ (for-syntax typed-scheme/private/base-types-extra)) (provide (rename-out [with-handlers: with-handlers] [define-type-alias define-type]) - assert with-type + assert with-type for for* (for-syntax (all-from-out typed-scheme/private/base-types-extra)))