Neil, I think this is a current limitation in TR. Can not case-> (i.e. spec optional args) along with KW args. From a previous email chain:
On Fri, Aug 10, 2012 at 3:12 AM, Eric Dobson <[email protected]> wrote: > It looks like there is an issue with turning case lambdas with > keywords into a contract. If you drop the one argument case for > function, it should work. Sam: "Unfortunately, the `case->` contract combinator that Typed Racket relies on doesn't support keyword arguments, so it's very difficult to generate an appropriate contract here." On Sun, Aug 12, 2012 at 8:35 PM, Neil Toronto <[email protected]>wrote: > 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<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 ⊥ > > _________________________ > Racket Developers list: > http://lists.racket-lang.org/**dev <http://lists.racket-lang.org/dev> >
_________________________ Racket Developers list: http://lists.racket-lang.org/dev

