Nice summary Warren.

There's still a little bit more to it though. If one serachs ruby-talk
one finds that there are also other less obvious pacularities about
Range --not that they are all the significant but they are there.

The problem I see is that if #member? goes back to being essentially
equivalent to #to_a.include? We're right back to the original problem
exactly as you point out:

> This was mainly done as an optimization,
> since checking 1 <= x <= 1000000 is a whole lot faster than Enumerating
> all 1000000 elements.  It also allowed Float Ranges to work as well.

How could one optimize a _cutstom_ memebership for a Range then? You
can't, so our choices for #member? trap us between inconsistant
functionaity or significant ineffeicency. And it still does not address
the underlying causes: #succ and #<=> are incompatabile in the String
class, and might also be so for other classes.

I've offered the best solution generally possible for this issue: It
corrects the underlying cuase, fixes the inconsistant functionality and
maintains efficiency. What more can one ask? Nonetheless no one seems
interested in it. I tend to think the reason is becuase it introduces a
new method (#cmp), but since no one has even touched on it, how do I
know? I'm at a loss. Do people just not get it? Did I not explain it
well enough? Did I miss something? Or is that people just prefer to
stew around in their own preconceptions?

T.