On Fri, Feb 24, 2017 at 18:13 David Sweeris via swift-evolution < swift-evolution@swift.org> wrote:
On Feb 23, 2017, at 14:44, David Sweeris <davesweeris@mac.com> wrote:
On Feb 23, 2017, at 2:33 PM, Karl Wagner <razielim@gmail.com> wrote:
On 23 Feb 2017, at 19:40, Max Moiseev <moiseev@apple.com> 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
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution