Neil, I think this is a current limitation in TR.  Can not case-&gt; (i.e. spec optional args) along with KW args.  From a previous email chain:<br><div><br></div><div><div class="im" style="color:rgb(80,0,80);font-family:arial,sans-serif;font-size:13px;background-color:rgb(255,255,255)">
On Fri, Aug 10, 2012 at 3:12 AM, Eric Dobson &lt;<a href="mailto:eric.n.dobson@gmail.com" style="color:rgb(17,85,204)">eric.n.dobson@gmail.com</a>&gt; wrote:<br></div><div class="im" style="color:rgb(80,0,80);font-family:arial,sans-serif;font-size:13px;background-color:rgb(255,255,255)">
&gt; It looks like there is an issue with turning case lambdas with<br>&gt; keywords into a contract. If you drop the one argument case for<br>&gt; function, it should work.<br><br></div><span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:13px;background-color:rgb(255,255,255)">Sam: &quot;Unfortunately, the `case-&gt;` contract combinator that Typed Racket</span><br style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:13px;background-color:rgb(255,255,255)">
<span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:13px;background-color:rgb(255,255,255)">relies on doesn&#39;t support keyword arguments, so it&#39;s very difficult to</span><br style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:13px;background-color:rgb(255,255,255)">
<span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:13px;background-color:rgb(255,255,255)">generate an appropriate contract here.&quot;</span><br><br><div class="gmail_quote">On Sun, Aug 12, 2012 at 8:35 PM, Neil Toronto <span dir="ltr">&lt;<a href="mailto:neil.toronto@gmail.com" target="_blank">neil.toronto@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On 08/12/2012 06:14 PM, Ray Racine wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Just completed a first cut draft TRing the Plot collection.  Completely<br>
untested, though the few things I&#39;ve tried worked fine.<br>
Neil/Sam, any suggestions, naming or layout conventions are much<br>
appreciated.  Otherwise, I&#39;ll do a cleanup pass, test it, and initiate a<br>
pull-request this week.<br>
<br>
<a href="https://github.com/RayRacine/racket/tree/tr-plot/collects/typed/plot" target="_blank">https://github.com/RayRacine/<u></u>racket/tree/tr-plot/collects/<u></u>typed/plot</a><br>
</blockquote>
<br></div></div>
Cool!<br>
<br>
This is probably going to annoy you, but the `Option&#39; type doesn&#39;t mean the argument isn&#39;t required. The entry for `surface3d&#39; is currently<br>
<br>
[surface3d ((Real Real -&gt; Real)<br>
            (Option Exact-Rational)<br>
            (Option Exact-Rational)<br>
            (Option Exact-Rational)<br>
            (Option Exact-Rational)<br>
            .... -&gt; Renderer3d)]<br>
<br>
where `....&#39; represents the keyword argument types. To account for the possible argument combinations, it should be<br>
<br>
[surface3d<br>
 (case-&gt; ((Real Real -&gt; Real)<br>
          .... -&gt; Renderer3d)<br>
         ((Real Real -&gt; Real)<br>
          (Option Exact-Rational)<br>
          .... -&gt; Renderer3d)<br>
         ((Real Real -&gt; Real)<br>
          (Option Exact-Rational)<br>
          (Option Exact-Rational)<br>
          .... -&gt; Renderer3d)<br>
         ((Real Real -&gt; Real)<br>
          (Option Exact-Rational)<br>
          (Option Exact-Rational)<br>
          (Option Exact-Rational)<br>
          .... -&gt; Renderer3d)<br>
         ((Real Real -&gt; Real)<br>
          (Option Exact-Rational)<br>
          (Option Exact-Rational)<br>
          (Option Exact-Rational)<br>
          (Option Exact-Rational)<br>
          .... -&gt; Renderer3d))]<br>
<br>
I agree with you that this is insane, and that Sam or Vincent should do something about it. :D<br>
<br>
In the meantime, write a new macro to use instead of `require/typed/provide&#39;. (Macros inside types won&#39;t expand.) Fortunately, function types with keyword arguments already expand to `case-&gt;&#39; types, so you don&#39;t have to change anything about those.<br>

<br>
Neil ⊥<br>
<br>
_________________________<br>
 Racket Developers list:<br>
 <a href="http://lists.racket-lang.org/dev" target="_blank">http://lists.racket-lang.org/<u></u>dev</a><br>
</blockquote></div><br></div>