diff --git a/pkgs/racket-test/tests/racket/contract/first-order.rkt b/pkgs/racket-test/tests/racket/contract/first-order.rkt index 0ec37a638a..b5cd734b12 100644 --- a/pkgs/racket-test/tests/racket/contract/first-order.rkt +++ b/pkgs/racket-test/tests/racket/contract/first-order.rkt @@ -6,7 +6,8 @@ (make-basic-contract-namespace 'racket/contract 'racket/promise - 'racket/class)]) + 'racket/class + 'racket/sequence)]) (contract-eval '(define-contract-struct couple (hd tl))) @@ -203,4 +204,25 @@ (ctest #t contract-first-order-passes? (class/c [m (-> any/c integer? integer?)]) (class* object% ((interface () [m (-> any/c integer? integer?)])) - (define/public (m x) x)))) + (define/public (m x) x))) + + (ctest #t contract-first-order-passes? + (sequence/c any/c) + (list 1 2 3)) + (ctest #t contract-first-order-passes? + (sequence/c any/c) + (vector 1 2 3)) + (ctest #f contract-first-order-passes? + (sequence/c any/c) + (hash 'x 1 'y 2)) + (ctest #f contract-first-order-passes? + (sequence/c any/c any/c) + (list 1 2 3)) + (ctest #f contract-first-order-passes? + (sequence/c any/c any/c) + (vector 1 2 3)) + (ctest #t contract-first-order-passes? + (sequence/c any/c any/c) + (hash 'x 1 'y 2)) + + ) diff --git a/racket/collects/racket/sequence.rkt b/racket/collects/racket/sequence.rkt index 998dd0f101..16e54c44d6 100644 --- a/racket/collects/racket/sequence.rkt +++ b/racket/collects/racket/sequence.rkt @@ -183,7 +183,12 @@ (list '#:min-count min-count) '()) ctcs)) - #:first-order sequence? + #:first-order + (λ (val) + (and (sequence? val) + (if (vector? val) (= n-cs 1) #t) + (if (list? val) (= n-cs 1) #t) + (if (hash? val) (= n-cs 2) #t))) #:projection (λ (orig-blame) (define blame (blame-add-context orig-blame "an element of"))