[swift-evolution] Will these two features be included in Swift 3?

Davide De Franceschi defrenz98 at hotmail.com
Mon Dec 7 07:17:57 CST 2015


So, I got now that I was confused.

When I saw this:
https://github.com/apple/example-package-fisheryates/blob/master/Sources/Fisher-Yates_Shuffle.swift#L26 <https://github.com/apple/example-package-fisheryates/blob/master/Sources/Fisher-Yates_Shuffle.swift#L26>
I was surprised as I was pretty sure you couldn't do that. But it works in 2.1 as well.

But it's extending a protocol, not a type.

but it still means that you can do what you wanted with
extension SequenceType where Generator.Element == Double {
  func foo() -> String {
    return "hello doubles!"
  }
}

(of course there are cases where the type is generic but it doesn't adopt a protocol with associated types to extend, so it's still plenty useful)

> On 7 Dec 2015, at 12:56, Krzysztof Siejkowski <krzysztof at siejkowski.net> wrote:
> 
> Oh, it could be so, I’m just not aware of it. I’ve tried Swift version 2.2-dev (LLVM 46be9ff861, Clang 4deb154edc, Swift 778f82939c) with
> 
> extension Array where Element == Double { 
>      func foo() -> String { 
>          return "hello doubles!" 
>      } 
> }
> 
> and got
> 
> repl.swift:1:31: error: same-type requirement makes generic parameter 'Element' non-generic
> extension Array where Element == Double {
>                               ^
> 
> Could you please point to docs / example / reference?
> 
> All the best,
> Krzysztof
> 
> 
> On 7 December 2015 at 13:34:51, Davide De Franceschi via swift-evolution (swift-evolution at swift.org <mailto:swift-evolution at swift.org>) wrote:
> 
>> I thought constraining an extension to a single type (#1) was already in 2.2?
>> I've seen it in a SPM example and also someone confirmed to me that it compiled
>> 
>> It went like
>> extension Array where Element == Double { // add stuff }
>> 
>>> On 7 Dec 2015, at 12:14, Krzysztof Siejkowski via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>>> 
>>> Concerning extension constraining, it’s already doable with:
>>> 
>>> ```
>>> protocol DoubleProtocol {}
>>> 
>>> extension Double : DoubleProtocol {}
>>> 
>>> extension Array where Element : DoubleProtocol {
>>>     func onlyForDoubles() -> String {
>>>             return "hello doubles!"
>>>     }
>>> }
>>> 
>>> [1.2].onlyForDoubles() // „hello doubles!”
>>> ["a"].onlyForDoubles() // error: type of expression is ambiguous without more context
>>> ```
>>> 
>>> However, I personally like the idea of making a syntactic sugar for that case.
>>> 
>>> All the best,
>>> Krzysztof
>>> 
>>> 
>>> On 7 December 2015 at 13:01:11, Krzysztof Siejkowski (krzysztof at siejkowski.net <mailto:krzysztof at siejkowski.net>) wrote:
>>> 
>>>> Concerning generic typealiases, the topic is already being discussed in „Generic `typealias`s” thread: https://lists.swift.org/pipermail/swift-evolution/2015-December/000132.html <https://lists.swift.org/pipermail/swift-evolution/2015-December/000132.html>. The core Swift team approves:
>>>> 
>>>> > Yes, this is definitely something that I (at least) would
>>>> like to see. Patches welcome :-)
>>>> > Chris (Lattner)
>>>> 
>>>> All the best,
>>>> Krzysztof
>>>> 
>>>> On 7 December 2015 at 12:41:05, Tuur Anton via swift-evolution (swift-evolution at swift.org <mailto:swift-evolution at swift.org>) wrote:
>>>> 
>>>>> Can you please add these features in Swift 3?
>>>>> 
>>>>> 1. The ability to do this:
>>>>> extension Array<Double> {
>>>>>     //extend arrays of doubles
>>>>> }
>>>>> 
>>>>> 2. Generic typealiases:
>>>>> struct Foo<T,V> {
>>>>>     let t: T
>>>>>     let v: V
>>>>> }
>>>>> typealias IntFoo<V> = Foo<Int,V> //Error in Swift 2.1
>>>>>  _______________________________________________
>>>>> swift-evolution mailing list
>>>>> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
>>>>> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>>  _______________________________________________
>>> swift-evolution mailing list
>>> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
>>> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
>> 
>>  _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20151207/74849829/attachment.html>


More information about the swift-evolution mailing list