diff --git a/collects/tests/typed-scheme/fail/require-typed-missing.rkt b/collects/tests/typed-scheme/fail/require-typed-missing.rkt new file mode 100644 index 0000000000..66c8b4e03a --- /dev/null +++ b/collects/tests/typed-scheme/fail/require-typed-missing.rkt @@ -0,0 +1,16 @@ +#; +(exn-pred "at least one") +#lang typed/racket + + +(require/typed (make-main (([Listof Node] [Listof Edge] -> Graph) + (State Number Number MouseEvent -> State) + (State KeyEvent -> State) + (State -> Scene) + (Any -> Boolean) + (State -> Boolean) + (Stop -> Graph) + (Any -> Edge) + (Edge -> Graph) + -> + (Boolean -> Graph)))) \ No newline at end of file diff --git a/collects/typed-scheme/private/prims.rkt b/collects/typed-scheme/private/prims.rkt index 7101c3be1d..a0bac01d3d 100644 --- a/collects/typed-scheme/private/prims.rkt +++ b/collects/typed-scheme/private/prims.rkt @@ -79,7 +79,9 @@ This file defines two sorts of primitives. All of them are provided into any mod #:fail-unless (eq? 'opaque (syntax-e #'opaque)) #f #:with opt #'(#:name-exists))) (syntax-parse stx - [(_ lib (~or sc:simple-clause strc:struct-clause oc:opaque-clause) ...) + [(_ lib:expr (~or sc:simple-clause strc:struct-clause oc:opaque-clause) ...) + (unless (< 0 (length (syntax->list #'(sc ... strc ... oc ...)))) + (raise-syntax-error #f "at least one specification is required" stx)) #'(begin (require/opaque-type oc.ty oc.pred lib . oc.opt) ... (require/typed sc.nm sc.ty lib) ...