<div>Thanks,</div><div><br></div><div>I did catch that, was just pointing out the non-termination.  The original source file was much larger and it took awhile to pare it down to the root cause.  Definitely a non-showstopper issue however.<br>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Nov 1, 2012 at 12:16 PM, Sam Tobin-Hochstadt <span dir="ltr">&lt;<a href="mailto:samth@ccs.neu.edu" target="_blank">samth@ccs.neu.edu</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="im">On Thu, Nov 1, 2012 at 12:07 PM, Ray Racine &lt;<a href="mailto:ray.racine@gmail.com">ray.racine@gmail.com</a>&gt; wrote:<br>

&gt; Fresh build from Racket git MASTER, the following causes DRRacket&#39;s Check<br>
&gt; Syntax to loop without termination.<br>
<br>
</div>Clearly, this isn&#39;t the behavior you want, but I don&#39;t think a<br>
contract is possible to generate for this code.<br>
<br>
If you change the type of the S2-x field to `(S0 T)`, then it works.<br>
That might even have been what you wanted.<br>
<div class="im"><br>
&gt;<br>
&gt; #lang typed/racket/base<br>
&gt;<br>
&gt; (provide f)<br>
&gt;<br>
&gt; (struct: (T) S1 ([x : (Listof String)]))<br>
&gt;<br>
&gt; (struct: (T) S2 ([x : S0]<br>
&gt;                  [g : (T -&gt; Boolean)]))<br>
&gt;<br>
&gt; (define-type (S0 T) (U (S1 T) (S2 T)))<br>
&gt;<br>
&gt; (: f (String -&gt; (S0 String)))<br>
&gt; (define (f x)<br>
&gt;   (S1 &#39;()))<br>
&gt;<br>
</div>&gt; ____________________<br>
&gt;   Racket Users list:<br>
&gt;   <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
&gt;<br>
<br>
<br>
<br>
--<br>
sam th<br>
<a href="mailto:samth@ccs.neu.edu">samth@ccs.neu.edu</a><br>
</blockquote></div><br></div>