On Dec 29, 2012, at 10:09 PM, Neil Toronto wrote:

>>    TR proved that it is applied to Foo if anything. Is TR too
>>    aggressive in negative positions?
> 
> I'm almost certain it is. Sam? (Wherefore art thou, Sam?)
> 
> I can see an argument for having overly aggressive contracts at first, before 
> having large test cases that demonstrate TR's implementation is almost always 
> sound. If these are training wheels, though, we should consider removing 
> them. The math library alone has at least 18k lines of TR code, it and 
> exercises the type system pretty thoroughly.
> 
>> In this case, the chaperone is necessary, since the "a" means one value
>> (not multiple), so you cannot eliminate the contract. Sadly.
> 
> One asymmetry between multiple arguments and multiple return values is that 
> the number of arguments a procedure accepts is observable, but the number of 
> return values isn't. If it were observable, and TR were less aggressive with 
> the first `Foo', a chaperone would be unnecessary.
> 
> There have got to be other uses for that, but I can't think of any offhand. 
> Something to do with continuations, maybe? But TR could easily annotate 
> lambdas with the number of values they return.


I have no doubt that right now we need a chaperone. I am arguing that we don't 
need a foo? check for the argument. 
_________________________
  Racket Developers list:
  http://lists.racket-lang.org/dev

Reply via email to