On Apr 9, 2014, at 9:50 PM, Tommi Tissari <rusty.ga...@icloud.com> wrote:
>> On 10 Apr 2014, at 00:22, Kevin Ballard <ke...@sb.org> wrote: >> >> FWIW, my point about range is it relies on One being the number 1, rather >> than being the multiplicative identity. AFAIK there's nothing special about >> 1 in a ring outside of its status as a multiplicative identity. Certainly >> it's not considered some special value for addition. > > Another problem with std::iter::range is that it requires too much from its > argument type A by saying A must implement Add<A, A> while it only returns a > forward iterator. > > Perhaps, in order to make a more sensible implementation of iter::range, a > new concept, a trait, is needed to be able to specify that a certain type T > implements a method 'increment' that modifies a variable of type T from value > x to value y such that: > 1) x < y > 2) there is no valid value z of type T satisfying x < z < y > > For integral types there would an implementation of this trait in stdlib with > 'increment' doing x += 1; > > Then, a natural extension to this trait would be a trait that has a method > 'advance(n: uint)' that would, at constant time, conceptually call the > 'increment' method n times. > > Then there would also be a 'decrement' method for going the other direction. > > There probably needs to be some other use cases for this new trait to carry > its weight though. This trait would disallow range(0f32, 10f32) because there are quite a lot of valid values z of type f32 satisfying 0f32 < z < 1f32. -Kevin _______________________________________________ Rust-dev mailing list Rust-dev@mozilla.org https://mail.mozilla.org/listinfo/rust-dev