Sam,<div><br></div><div>Tried it.  What am I missing?  Thanks.</div><div><br></div><div><div>#lang typed/racket</div><div><br></div><div>(require </div><div> (except-in racket/set</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>    set/c))</div>
<div><br></div><div>(define-predicate setof-string?  (Setof String))</div></div><div><br></div><div><div>racket@&gt; ,enter &quot;/code/knozama/fca/src/main/racket/harvest/test.rkt&quot;</div><div>test.rkt:19:33: Type Checker: Type (Setof String) could not be converted to a contract. in: (Setof String)</div>
</div><div><br></div><div><br></div><div><br></div><div><br><div class="gmail_quote">On Sat, May 14, 2011 at 1:54 PM, 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="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div class="im">On Sat, May 14, 2011 at 1:07 PM, Ray Racine &lt;<a href="mailto:ray.racine@gmail.com">ray.racine@gmail.com</a>&gt; wrote:<br>

&gt; First I think typed/racket is fantastic.    But when you stray from the<br>
&gt; path, its quicksand. :)<br>
<br>
</div>I&#39;m glad you&#39;re enjoying it.<br>
<div class="im"><br>
&gt; I&#39;d like to cast / assert  a given (Setof Any) to a (Setof String).<br>
&gt; Path #1 - Come up with the following assert predicate.<br>
&gt; (: string-set? ((Setof Any) -&gt; Boolean : (Setof String)))<br>
&gt; The following approach works for lists but fails to translate.<br>
&gt; (: lststr? ((Listof Any) -&gt; Boolean : (Listof String)))<br>
&gt; (define (lststr? lst)<br>
&gt;  (andmap string? lst))<br>
&gt; The quicksand appears to be some sort of constraint on the verifying<br>
&gt; procedure to have some sort of magic filter tag on its return value.  How<br>
&gt; does one get it there?<br>
<br>
</div>If you want to define predicates, the best way is to use<br>
`define-predicate&#39;.  For example, for (Listof String):<br>
<br>
(define-predicate lststr? (Listof String))<br>
<div class="im"><br>
&gt; Path #2 - Typed uses lots of contracts.  racket/set has a set/c procedure<br>
&gt; which allows me to make contract predicates so ...  but I could not any<br>
&gt; variation on the following to work, starting with set/c is untyped in<br>
&gt; racket/set ... qucksand.<br>
<br>
</div>Unfortunately, it&#39;s not possible to use the contract system usefully<br>
with Typed Racket at the moment.  This is something that I&#39;m looking<br>
into fixing in the near term, though.<br>
<font color="#888888">--<br>
sam th<br>
<a href="mailto:samth@ccs.neu.edu">samth@ccs.neu.edu</a><br>
</font></blockquote></div><br><br clear="all"><br>-- <br>The object of life is not to be on the side of the majority, but to escape finding oneself in the ranks of the insane. - Marcus Aurelius <br>
</div>