On 02/01/2012 09:55 AM, [email protected] wrote:
collects/unstable/contract.rkt ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ --- OLD/collects/unstable/contract.rkt +++ NEW/collects/unstable/contract.rkt @@ -171,6 +171,14 @@ (lambda (idx . elems) #t))))))) sequence?)))+;; Added by ntoronto + +(define contract/c (or/c contract? (any/c . -> . any/c))) + +(define (treeof elem-contract) + (or/c elem-contract + (listof (recursive-contract (treeof elem-contract) #:flat))))
'contract/c' is not useful: 'contract?' already recognizes predicates, and due to the way 'or/c' handles mixed flat and higher-order contracts, the arrow contract's checks *never apply*.
> (contract? even?) #t > (define/contract ev (or/c contract? (-> any/c any/c)) even?) > (ev 5 6 7) ;; You might think this would be a contract error... nope! even?: expects 1 argument, given 3: 5 6 7 > (define/contract vv (or/c contract? (-> any/c any/c)) vector->values) > (vv '#(1 2 3)) ;; Likewise... but not a contract error. 1 2 3 Ryan _________________________ Racket Developers list: http://lists.racket-lang.org/dev

