[swift-evolution] ExpressibleByZeroLiteral

Xiaodi Wu xiaodi.wu at gmail.com
Fri Mar 31 11:25:22 CDT 2017


Have you seen the revised integer protocols?
https://github.com/apple/swift-evolution/blob/master/proposals/0104-improved-integers.md

`SignedNumeric` will no longer refine `Comparable`. It will, however, still
require that you can define multiplication.


On Fri, Mar 31, 2017 at 11:09 AM, Sasha Lopoukhine via swift-evolution <
swift-evolution at swift.org> wrote:

> Hello everyone!
>
> I'd like to discuss the constraint on Strideable. I see no reason to
> restrict Strideable types to non-circular types. It would be pretty
> neat/useful to be able to define a type such as a Week, with strides
> looping around to the start of the enum. Currently, the only reason this is
> impossible is because of the restriction on Stride that it must conform to
> SignedNumber.
>
> I think that it might be worth looking into defining a new protocol
> specifically for the constraint on Strideable.Stride, something that looks
> like this:
>
> /// Instances of conforming types can be subtracted, arithmetically
> /// negated, and initialized from `0`.
> ///
> /// Axioms:
> ///
> /// - `x - 0 == x`
> /// - `-x == 0 - x`
> /// - `-(-x) == x`
> public protocol StrideProtocol : ExpressibleByIntegerLiteral {
>
>     /// Returns the result of negating `x`.
>     prefix public static func -(x: Self) -> Self
>
>     /// Returns the difference between `lhs` and `rhs`.
>     public static func -(lhs: Self, rhs: Self) -> Self
> }
>
> public typealias SignedNumber = StrideProtocol & Comparable
>
> Strideable.Stride could then conform to StrideProtocol, allowing groups
> etc.
>
> WDYT?
>
> -- Sasha
>
>
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20170331/c54b88c6/attachment.html>


More information about the swift-evolution mailing list