Actually, looking over this, it looks like #:dispatch just overrides the 
existing predicate rather than augmenting it in any way. This still seems 
pretty strange. What is the use case for this?

> On Apr 24, 2015, at 00:49, Alexis King <lexi.lam...@gmail.com> wrote:
> 
> I’m working my way through the implementation of racket/generic, and this 
> jumped out at me as a little odd. Apparently, in the #:defaults and 
> #:fast-defaults clauses of define-generics, there is support for an 
> undocumented #:dispatch clause. Using it looks a like this:
> 
> (define-generics fooable
>  (foo fooable)
>  #:defaults
>  ([list? #:dispatch empty?
>    (define (foo fooable)
>      (displayln "the empty list was foo'd"))]))
> 
> As far I can tell, all this does is introduce an extra predicate that is 
> checked in addition to the other one. As far as I can tell, this could just 
> be done with (and/c list? empty?), so this feels quite redundant. More 
> bizarre, if the #:dispatch clause is omitted, then it defaults to the same as 
> the first predicate!
> 
> This means that the predicate is, when used as documented, always applied 
> twice for no reason I can discern. Any authors of racket/generic that could 
> provide some insight on what this is and why it exists?
> 
> Alexis

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to