[plt-scheme] Contract Error Message
YC wrote:
> 
> On Mon, Jul 20, 2009 at 11:59 AM, David Van Horn <dvanhorn at ccs.neu.edu 
> <mailto:dvanhorn at ccs.neu.edu>> wrote:
> 
>     Carl Eastlund wrote:
> 
> 
>         Not according to the documentation I find here:
> 
>         http://docs.plt-scheme.org/reference/contracts.html
> 
>         Constants are perfectly acceptable contracts.  If the contract?
>         function doesn't accept them, then either contract? needs to start
>         accepting them or or/c needs to be documented with a more general
>         contract.  But values like #f, 'foo, or 5 are usable with most
>         contract primitives.
> 
> 
>     Ah, yes, (contract? #f) => #t, which I forgot.
> 
>     However, or/c accepts any number of predicates and *higher-order*
>     contracts, so perhaps the or/c contract can be refined to enforce
>     this aspect of the specification?
> 
> 
> I am a happy user of the current contract system and would hate to see 
> this change.  Constants are a perfectly valid contract and why should 
> they not be accepted in a higher order contract?  This would seriously 
> curtail the expressiveness of the contract system, not to mention create 
> two separate rules to remember. 
I don't want to change the contract language, so I must be confused 
about what a "higher-order" contract is -- which I guessed was anything 
satisfying:
(lambda (x)
   (and (contract? x)
        (not (flat-contract? x)))
But it seems the bug here is actually in the docs.
"Takes any number of predicates and higher-order contracts"
The higher-order part should be dropped, right?
David