[racket-dev] exact nonnegative integers as sequences?

From: Robby Findler (robby at eecs.northwestern.edu)
Date: Mon Apr 18 11:14:03 EDT 2011

FWIW, it would make sense to me if TR's regexp-match function accepted
only regexps in the first argument (ditto for Racket and then Scracket
could take strings (which of course are hashes mapping integers to


On Mon, Apr 18, 2011 at 10:09 AM, Eli Barzilay <eli at barzilay.org> wrote:
> Three minutes ago, Robby Findler wrote:
>> On Mon, Apr 18, 2011 at 9:59 AM, Eli Barzilay <eli at barzilay.org> wrote:
>> > 9 minutes ago, Matthew Flatt wrote:
>> >> Thanks for the clarifications, and I now agree that it's not about
>> >> genericity.
>> >>
>> >> I think it's about scripts to programs, though. In a script, not
>> >> having to type `(in-range ....)' or `(in-list ....)' feels
>> >> worthwhile. You make a good point that those scriptish shortcuts can
>> >> make understanding the code a little harder, and using `in-range' or
>> >> `in-list' can good for long-term maintenance. Still, I think it's
>> >> better to allow the shortcuts.
>> >
>> > Is there any difference between this and other generic operations
>> > (which could also benefit from types being more explicit and more
>> > checked)?
>> >
>> > [Not intended as a flame -- I'm curious to see if there's something
>> > makes some generics be worse than others.]
>> As you probably guessed, I think that this is more of a
>> coherent-language-design issue, but I bet someone could conduct some
>> kind of a survey type thing to figure out what leads to more bugs or
>> what programmers find confusing or something along those lines (ie,
>> you decide on some concrete measure for "worse" and then conduct a
>> study to try to answer that question).
> :)  My own use of the for loops is usually without using the generic
> dispatch thing, similar to regexp functions.  I get the feeling that
> you'd similarly want those to throw errors on strings and require an
> explicit `regexp' if you really want to use a string -- but there the
> reason is clearer: you have (regexp-match "foo" "bar") and it's easy
> to mix the two -- so to avoid relying on my memory, I'd just use
> (regexp-match "foo" #rx"bar") and let racket barf at me when I need
> to change the order.  (And even TR won't save me there.)
> --
>          ((lambda (x) (x x)) (lambda (x) (x x)))          Eli Barzilay:
>                    http://barzilay.org/                   Maze is Life!

Posted on the dev mailing list.