> 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