diff --git a/pkgs/racket-test/tests/racket/curry.rkt b/pkgs/racket-test/tests/racket/curry.rkt index a939421db7..714ce8465a 100644 --- a/pkgs/racket-test/tests/racket/curry.rkt +++ b/pkgs/racket-test/tests/racket/curry.rkt @@ -29,4 +29,4 @@ (check-equal? ((((curry foldl) +) 0) '(1 2 3)) 6) (check-exn exn:fail:contract? (λ () (curry 1 2))) -; (check-exn exn:fail:contract? (λ () (curry 1))) +(check-exn exn:fail:contract? (λ () (curry 1))) diff --git a/racket/collects/racket/function.rkt b/racket/collects/racket/function.rkt index 7030250121..3274721def 100644 --- a/racket/collects/racket/function.rkt +++ b/racket/collects/racket/function.rkt @@ -75,9 +75,15 @@ curried)))) ;; curry is itself curried -- if we get args then they're the first step (define curry - (case-lambda [(f) (define (curried . args) (curry* f args '() '())) - curried] - [(f . args) (curry* f args '() '())])) + (case-lambda + [(f) + (unless (procedure? f) + (raise-argument-error (if right? 'curryr 'curry) "procedure?" f)) + (define (curried . args) (curry* f args '() '())) + curried] + [(f . args) + (curry* f args '() '())])) + (make-keyword-procedure (lambda (kws kvs f . args) (curry* f args kws kvs)) curry))