> On Feb 23, 2017, at 14:44, David Sweeris <[email protected]> wrote:
> 
> 
>>> On Feb 23, 2017, at 2:33 PM, Karl Wagner <[email protected]> wrote:
>>> 
>>> 
>>> On 23 Feb 2017, at 19:40, Max Moiseev <[email protected]> wrote:
>>> 
>>> Conformance to Comparable is not required by anything in the standard 
>>> library. Besides, it is always possible to further constrain your own code 
>>> as in:
>>> 
>> 
>> Besides FloatingPoint, you mean? Or Collection indexes? Quite a lot of 
>> stuff, actually.
>> 
>>> func f<T : Number>(_ x: T) where T.Magnitude : Comparable {}
>>> 
>>> I would argue that adding constraints without solid proof of them being 
>>> useful and necessary is not the right thing to do.
>>> Also, sorting things by magnitude will require using a predicate-based 
>>> sorted() anyway, and that does not require Comparable.
>>> 
>>> Max
>> 
>> Yes, but the constraints in the standard library should also convey some 
>> meaning and be useful. What do we mean by a “magnitude” anyway? Won’t it be 
>> strange in practice that I can create a “magnitude” out of nothing but an 
>> arbitrary integer literal but can’t compare two values? Ultimately it looks 
>> like a deficiency in the design to me - either it’s a simple scalar, 
>> ExpressibleByIntegerLiteral and Comparable, or it’s something more complex 
>> and can’t be either.
>> 
>> This is exactly the kind of flaw I’ve been working around with the current 
>> Strideable.Stride (i.e. current SignedNumber). If a type is 
>> ExpressibleByIntegerLiteral, you should be able to basically do all the 
>> things to it that you can do with an integer.
> 
> (replying to bolded part)
> 
> Not necessarily... Complex numbers can conform to 
> `ExpressibleByIntegerLiteral` but not `Comparable`. At least not in a 
> generally-accepted way.

Perhaps a better example would be the `%` operator, since it involves stdlib 
types. Floating point types are ExpressibleByIntegerLiteral, but don't have the 
% operator that integers have.

- Dave Sweeris
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to