This seems odd, but is useful:

(define/contract (foo #:opt1 [opt1 #f] #:opt2 [opt2 #f])
    (->* () (#:opt1 real? #:opt2 real?) real?)
  (or opt1 opt2 30))


The keyword arguments' default values aren't 'real?', but nothing complains when 'foo' is applied.

It allows me to have 'foo' with an '#:opt1' keyword with contract 'real?', default 30, and an '#:opt2' keyword for backward-compatibility:

(foo)                      ; => 30
(foo #:opt1 45)            ; => 45
(foo #:opt2 23)            ; => 23
(foo #:opt1 45 #:opt2 23)  ; => 45


Is it intentional? Will this behavior ever change?

Neil T
_________________________________________________
 For list-related administrative tasks:
 http://lists.racket-lang.org/listinfo/users

Reply via email to