[racket] Considering backward-incompatible change to Plot

From: Neil Toronto (neil.toronto at gmail.com)
Date: Tue Mar 17 12:33:47 EDT 2015

Plot has been converted to Typed Racket in the upcoming Racket 6.2.

I'm strongly considering taking this opportunity to improve the API. The 
change is backward-incompatible, however, so I need input from those of 
you who use Plot a lot.

In particular, recent experience with Pict3D makes it clear that the 
type of the `plot` function shouldn't be this:

   (-> (Treeof (U nonrenderer renderer2d)) ... (U Void (Instance Snip%)))

but should be this instead:

   (-> (Treeof (U nonrenderer renderer2d)) ... Plot)

where a `Plot` instance is a value that can be queried for its 
properties (such as the legend, plot bounds, ticks, etc.) and just 
happens to print in DrRacket as an interactive snip. The type of 
`plot3d` would be changed to return `Plot3D` instances.

Casual uses wouldn't see any change at all.

However, functions that receive or return plots, *which also put 
contracts on plots*, would have to change to use `plot?` instead of 
(is-a?/c snip%), or use (require plot/snip), a new compatibility module, 
instead of (require plot).

How many programs of yours would this change break?

Any objections? Any suggestions?

Neil ⊥

Posted on the users mailing list.