Bingo.  Thanks.<br><br><div class="gmail_quote">On Fri, Aug 10, 2012 at 3:43 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 Fri, Aug 10, 2012 at 3:34 PM, Ray Racine &lt;<a href="mailto:ray.racine@gmail.com">ray.racine@gmail.com</a>&gt; wrote:<br>
&gt; Sure, I&#39;ll probably sketch out a goodly chunk of Plot into TR this weekend<br>
&gt; and will do that modification.<br>
&gt;<br>
&gt; My little POC of TRing the Hist* procedures ended translating pretty well.<br>
&gt;<br>
&gt; <a href="https://gist.github.com/3317104" target="_blank">https://gist.github.com/3317104</a><br>
&gt;<br>
&gt; The only &quot;bump&quot; I&#39;m still seeing is in attempting to leverage Snip%  out of<br>
&gt; typed/mred/mred.<br>
&gt;<br>
&gt; When I try and type<br>
&gt; (plot (Renderer-Tree ... stuff ... -&gt; (U Snip% Void))<br>
&gt;<br>
&gt; running  (test3) fails.<br>
<br>
</div>It would be easier for me to tell if you include the error message.<br>
But probably the issue is that you need (Instanceof Snip%), not just<br>
Snip%, which is the type of a *class*, not an object.<br>
<div class="HOEnZb"><div class="h5"><br>
&gt; What I have now just stubs def-type Image-Snip% with Any, which isn&#39;t that<br>
&gt; bad at all.<br>
&gt;<br>
&gt; Is it because TR is currently invariant with Classes or did I tickle another<br>
&gt; bug here?  Image-Snip% is a sub-type (class) of Snip%.<br>
&gt;<br>
&gt;<br>
&gt; Say if typed/mred/mred explicitly proved a typed Image-Snip% would<br>
&gt; everything work?<br>
&gt;<br>
&gt; Ray<br>
&gt;<br>
&gt;<br>
&gt; On Fri, Aug 10, 2012 at 3:00 PM, Neil Toronto &lt;<a href="mailto:neil.toronto@gmail.com">neil.toronto@gmail.com</a>&gt;<br>
&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; On 08/10/2012 11:54 AM, Sam Tobin-Hochstadt wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; On Fri, Aug 10, 2012 at 1:38 PM, Ray Racine &lt;<a href="mailto:ray.racine@gmail.com">ray.racine@gmail.com</a>&gt; wrote:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Here <a href="https://gist.github.com/3315984" target="_blank">https://gist.github.com/3315984</a><br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; The first (test1) works fine.  Note it uses a KW arg.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; However, (test2) fails.  I thought it was the complexity of the first<br>
&gt;&gt;&gt;&gt; arg<br>
&gt;&gt;&gt;&gt; that I was getting wrong.  But when the KW #:label is commented out it<br>
&gt;&gt;&gt;&gt; works<br>
&gt;&gt;&gt;&gt; fine.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; What&#39;s happening here is that vectors don&#39;t subtype the way lists do,<br>
&gt;&gt;&gt; so (Vector Symbol Flonum) isn&#39;t an appropriate value when you need a<br>
&gt;&gt;&gt; (Vector Any (U Real False Interval)).  This isn&#39;t a problem when you<br>
&gt;&gt;&gt; don&#39;t have the keyword argument, because Typed Racket can figure out<br>
&gt;&gt;&gt; the needed types from the type of `discrete-histogram`, and so gives<br>
&gt;&gt;&gt; the vector literals appropriate types.  However, TR doesn&#39;t currently<br>
&gt;&gt;&gt; manage to propagate this information when looking at keyworded<br>
&gt;&gt;&gt; applications, which are much more complex when expanded.  Thus the<br>
&gt;&gt;&gt; behavior you&#39;re seeing.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; If we give TR a little help here, then this works:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; (define: lst : (Listof (Vector Any (U Real False Interval)))<br>
&gt;&gt;&gt;    (list #(A 1.0) #(B 2.0) #(B 3.0) (vector &#39;C (ivl 0.5 1.5))))<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; (define (test2)<br>
&gt;&gt;&gt;    (plot (discrete-histogram lst #:label &quot;Hello&quot;)))<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; One way that `plot` could make this easier would be to support lists<br>
&gt;&gt;&gt; in addition to vectors for histogram data.<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; That wouldn&#39;t be hard to change. The contract and function are both<br>
&gt;&gt; defined in the file &quot;plot/plot2d/rectangle.rkt&quot;. You want to take a crack at<br>
&gt;&gt; it, Ray? :)<br>
&gt;&gt;<br>
&gt;&gt; You should only have to change the contract of `cat-vals&#39; in<br>
&gt;&gt; `discrete-histogram&#39; (to se `or/c&#39;), and change the match pattern that<br>
&gt;&gt; destructures it to (list (or (vector cats ys) (list cats ys)) ...).<br>
&gt;&gt;<br>
&gt;&gt; Neil ⊥<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; ____________________<br>
&gt;&gt;  Racket Users list:<br>
&gt;&gt;  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
&gt;<br>
&gt;<br>
&gt;<br>
&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>
</div></div><span class="HOEnZb"><font color="#888888">--<br>
sam th<br>
<a href="mailto:samth@ccs.neu.edu">samth@ccs.neu.edu</a><br>
</font></span></blockquote></div><br>