<div dir="ltr">I think maybe you've just found a bug. Do you have a program to share?<div><br></div><div><div>[robby@yanpu] ~/Downloads$ racket</div><div>Welcome to Racket v5.3.1.12.</div><div>> ((contract (-> integer? integer?) (lambda (x) (values 1 2)) 'pos 'neg) 1)</div>
<div>stdin::2: broke its contract</div><div> expected 1 value, returned 2 values</div><div> in: the range of</div><div> (-> integer? integer?)</div><div> contract from: pos</div><div> blaming: pos</div><div> context...:</div>
<div> /Users/robby/git/plt/collects/racket/contract/private/blame.rkt:89:0: raise-blame-error</div><div> /Users/robby/git/plt/collects/racket/private/misc.rkt:87:7</div></div><div><br></div></div><div class="gmail_extra">
<br><br><div class="gmail_quote">On Sun, Jan 6, 2013 at 12:26 PM, Matthias Felleisen <span dir="ltr"><<a href="mailto:matthias@ccs.neu.edu" target="_blank">matthias@ccs.neu.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Is this really the best we can do for a contracted first-order procedure that accidentally returns two values instead of one:<br>
<br>
Language: racket.<br>
. . procedure-result chaperone: arity mismatch;<br>
wrapper does not accept the number of values produced by<br>
the original procedure<br>
wrapper: #<procedure><br>
number of values: 2<br>
<br>
<br>
??<br>
<br>
-- Matthias<br>
<br>
<br>
_________________________<br>
Racket Developers list:<br>
<a href="http://lists.racket-lang.org/dev" target="_blank">http://lists.racket-lang.org/dev</a><br>
</blockquote></div><br></div>