Why isn't: (->* (input-port? any/c) #:rest list? any)
by itself the contract that you want? Robby On Sun, Jun 29, 2014 at 12:08 PM, Alexander D. Knauth <[email protected]> wrote: > You can use or/c to do this, as long as you guard them like this so that no > more than one contract matches at a time: > (or/c > (and/c (procedure-has-arity/c 2) (-> input-port? any/c any)) > (and/c (procedure-has-arity/c 3) (-> input-port? any/c any/c any)) > (and/c (procedure-has-arity/c 4) (-> input-port? any/c any/c any/c any)) > (->* (input-port? any/c) #:rest list? any) > ) > > Or, you could use if/c from unstable/contract, or define a cond/c macro like > this: > (require unstable/contract) > (define-syntax cond/c > (syntax-rules (else) > [(cond/c) none/c] > [(cond/c [else else-c]) > else-c] > [(cond/c [pred then-c] clause ...) > (if/c pred > then-c > (cond/c clause ...))])) > > (cond/c [(procedure-has-arity/c 2) (-> input-port? any/c any)] > [(procedure-has-arity/c 3) (-> input-port? any/c any/c any)] > [(procedure-has-arity/c 4) (-> input-port? any/c any/c any/c any)] > [else (->* (input-port? any/c) #:rest list? any)]) > > By the way it has to be procedure-has-arity/c, not > procedure-includes-arity/c: > (define (procedure-has-arity/c arity) > (define normalized-arity (normalize-arity arity)) > (flat-named-contract > `(procedure-has-arity/c ,normalized-arity) > (λ (f) > (and (procedure? f) > (arity=? (procedure-arity f) normalized-arity))))) > > On Jun 29, 2014, at 8:00 AM, Roman Klochkov <[email protected]> wrote: > > How to make a contract, that accepts > (-> input-port? any/c any) > (-> input-port? any/c any/c any) > (-> input-port? any/c any/c any/c any) > ... > and > (->* (input-port? any/c) #:rest list? any) > > > So theare should be at least two args and first arg should be input-port. > > -- > Roman Klochkov > > ____________________ > Racket Users list: > http://lists.racket-lang.org/users > > > > ____________________ > Racket Users list: > http://lists.racket-lang.org/users > ____________________ Racket Users list: http://lists.racket-lang.org/users

