[racket-dev] TRPlot - A Typed Racket-ing of Plot

From: Neil Toronto (neil.toronto at gmail.com)
Date: Sun Aug 12 20:35:00 EDT 2012

On 08/12/2012 06:14 PM, Ray Racine wrote:
> Just completed a first cut draft TRing the Plot collection.  Completely
> untested, though the few things I've tried worked fine.
> Neil/Sam, any suggestions, naming or layout conventions are much
> appreciated.  Otherwise, I'll do a cleanup pass, test it, and initiate a
> pull-request this week.
>
> https://github.com/RayRacine/racket/tree/tr-plot/collects/typed/plot

Cool!

This is probably going to annoy you, but the `Option' type doesn't mean 
the argument isn't required. The entry for `surface3d' is currently

[surface3d ((Real Real -> Real)
             (Option Exact-Rational)
             (Option Exact-Rational)
             (Option Exact-Rational)
             (Option Exact-Rational)
             .... -> Renderer3d)]

where `....' represents the keyword argument types. To account for the 
possible argument combinations, it should be

[surface3d
  (case-> ((Real Real -> Real)
           .... -> Renderer3d)
          ((Real Real -> Real)
           (Option Exact-Rational)
           .... -> Renderer3d)
          ((Real Real -> Real)
           (Option Exact-Rational)
           (Option Exact-Rational)
           .... -> Renderer3d)
          ((Real Real -> Real)
           (Option Exact-Rational)
           (Option Exact-Rational)
           (Option Exact-Rational)
           .... -> Renderer3d)
          ((Real Real -> Real)
           (Option Exact-Rational)
           (Option Exact-Rational)
           (Option Exact-Rational)
           (Option Exact-Rational)
           .... -> Renderer3d))]

I agree with you that this is insane, and that Sam or Vincent should do 
something about it. :D

In the meantime, write a new macro to use instead of 
`require/typed/provide'. (Macros inside types won't expand.) 
Fortunately, function types with keyword arguments already expand to 
`case->' types, so you don't have to change anything about those.

Neil ⊥


Posted on the dev mailing list.