Hello,

I’ve come again with another proposal directly from the Generics Manifesto. 
Please let me know if it needs any modifications before sending the pull 
request.

Typealiases in protocols and protocol extensions

Proposal: SE-XXXX 
<https://github.com/hartbit/swift-evolution/blob/typealiases-in-protocols/proposals/XXXX-typealiases-in-protocols.md>
Authors: David Hart <https://github.com/hartbit>, Doug Gregor 
<https://github.com/DougGregor>
Status: TBD
Review manager: TBD
 
<https://github.com/hartbit/swift-evolution/blob/typealiases-in-protocols/proposals/XXXX-typealiases-in-protocols.md#introduction>Introduction

This proposal is from the Generics Manifesto 
<https://github.com/apple/swift/blob/master/docs/GenericsManifesto.md> and 
brings the typealias keyword back into protocols for type aliasing.

 
<https://github.com/hartbit/swift-evolution/blob/typealiases-in-protocols/proposals/XXXX-typealiases-in-protocols.md#motivation>Motivation

In Swift versions prior to 2.2, the typelias keyword was used outside of 
protocols to declare type aliases and in protocols to declare associated types. 
Since SE-0011 
<https://github.com/apple/swift-evolution/blob/master/proposals/0011-replace-typealias-associated.md>
 and Swift 2.2, associated type now use the associatedtype keyword and typelias 
is available for implementing true associated type aliases. 

 
<https://github.com/hartbit/swift-evolution/blob/typealiases-in-protocols/proposals/XXXX-typealiases-in-protocols.md#proposed-solution>Proposed
 solution

The solution allows the creation of associated type aliases. Here is an example 
from the standard library:

protocol Sequence {
  associatedtype Iterator : IteratorProtocol
  typealias Element = Iterator.Element
}
The example above shows how this simplifies referencing indirect associated 
types:

func sum<T: Sequence where T.Element == Int>(sequence: T) -> Int {
    return sequence.reduce(0, combine: +)
}
 
<https://github.com/hartbit/swift-evolution/blob/typealiases-in-protocols/proposals/XXXX-typealiases-in-protocols.md#detailed-design>Detailed
 design

The following grammar rules needs to be added:

protocol-member-declaration → protocol-typealias-declaration

protocol-typealias-declaration → typealias-declaration

 
<https://github.com/hartbit/swift-evolution/blob/typealiases-in-protocols/proposals/XXXX-typealiases-in-protocols.md#impact-on-existing-code>Impact
 on existing code

This will have no impact on existing code, but will probably require improving 
the Fix-It that was created for migrating typealias to associatedtype in Swift 
2.2.
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to