But that does hide the intent of the case-lambda usage, which is captured in the original.<br><br><div class="gmail_quote">On Mon, Oct 25, 2010 at 8:21 AM, Sam Tobin-Hochstadt <span dir="ltr">&lt;<a href="mailto:samth@ccs.neu.edu">samth@ccs.neu.edu</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">On Mon, Oct 25, 2010 at 10:06 AM, Doug Williams<br>
<div class="im">&lt;<a href="mailto:m.douglas.williams@gmail.com">m.douglas.williams@gmail.com</a>&gt; wrote:<br>
&gt;<br>
</div><div class="im">&gt;   (case-&gt; (-&gt;r ((r random-source?)<br>
&gt;                 (a real?)<br>
&gt;                 (b (&gt;/c a)))<br>
&gt;                real?)<br>
&gt;           (-&gt;r ((a real?)<br>
&gt;                 (b (&gt;/c a)))<br>
&gt;                real?)))<br>
&gt;<br>
&gt; I&#39;m not sure that one can be easily rewritten in the current contract<br>
&gt; system. [I think I would have to move the b &gt; a constraint into the code<br>
&gt; itself in the current contract system. Or, change the argument order and<br>
&gt; break backward compatibility.]<br>
<br>
</div>This can be written as a dependent contract, but with worse error messages.<br>
<br>
(-&gt;i ([r/a (or/c random-source? real?)] [a/b real?])<br>
       ([b/opt (r/a a/b) (if (random-source? r/a) (&gt;/c a/b) none/c)])<br>
       [result real?])<br>
<font color="#888888"><br>
--<br>
sam th<br>
<a href="mailto:samth@ccs.neu.edu">samth@ccs.neu.edu</a><br>
</font></blockquote></div><br>