> 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.

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

Reply via email to