diff --git a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/private/parse-type.rkt b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/private/parse-type.rkt index 09f6db8f..5f60b609 100644 --- a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/private/parse-type.rkt +++ b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/private/parse-type.rkt @@ -64,8 +64,13 @@ ;; The body of a Forall type (define-syntax-class all-body #:attributes (type) - (pattern (type)) - (pattern (~and type ((~or (~once :->^) x) ...)))) + ;; FIXME: the error message when a failure is triggered by this case + ;; is not very good, but I have been unsuccessful with ~fail + ;; or with #:fail-when. -- AT + (pattern (~and (:->^ x y ~! z ...) (~fail)) + #:with type 'dummy) + (pattern (~and type ((~or (~once :->^) (~not :->^)) ...))) + (pattern (type))) (define (parse-literal-alls stx) (syntax-parse stx diff --git a/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/unit-tests/parse-type-tests.rkt b/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/unit-tests/parse-type-tests.rkt index 7827e098..b9ebdebd 100644 --- a/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/unit-tests/parse-type-tests.rkt +++ b/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/unit-tests/parse-type-tests.rkt @@ -82,14 +82,15 @@ [(-> (values Number Boolean Number)) (t:-> (-values (list N B N)))] [(Number -> Number) (t:-> N N)] [(All (A) Number -> Number) (-poly (a) (t:-> N N))] - [(All (A) -> Number Number) (-poly (a) (t:-> N N))] + [FAIL (All (A) -> Number Number)] [(All (A) (Number -> Number)) (-poly (a) (t:-> N N))] [(All (A) (-> Number Number)) (-poly (a) (t:-> N N))] [(All (A) A -> A) (-poly (a) (t:-> a a))] [(All (A) A → A) (-poly (a) (t:-> a a))] - [(All (A) → A A) (-poly (a) (t:-> a a))] + [FAIL (All (A) → A A)] [(All (A) (A -> A)) (-poly (a) (t:-> a a))] [(All (A) (-> A A)) (-poly (a) (t:-> a a))] + [FAIL (All (A) -> Integer -> Integer -> Integer)] ;; requires transformer time stuff that doesn't work #;[(Refinement even?) (make-Refinement #'even?)] [(Number Number Number Boolean -> Number) (N N N B . t:-> . N)]