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

