[swift-evolution] [Pitch] Self.withoutSpecialization

Dave Abrahams dabrahams at apple.com
Sat Jul 2 10:40:19 CDT 2016



on Fri Jul 01 2016, "T.J. Usiyan via swift-evolution" <swift-evolution at swift.org> wrote:

> Bump
>
> On Fri, Jul 1, 2016 at 11:56 AM, T.J. Usiyan
> <griotspeak at gmail.com> wrote:
>
>>
>>
>> ## The Issue
>> Given
>> ``` swift
>> public protocol Zipper1D : CustomStringConvertible {
>>     associatedtype Element
>> }
>> ```
>>
>> We can almost write a `flatMap`  which keeps the general identity of self
>> and swaps out the Element in the output.
>>
>> ``` swift
>> func flatMap<
>>         NewElement, SegmentOfResult : Collection, Output : Zipper1D where
>>         SegmentOfResult.Iterator.Element == NewElement, Output.Element ==
>> NewElement>
>>         (_ transform: @noescape (Element) throws -> SegmentOfResult)
>> rethrows -> Output
>> ```
>>
>> ## The Proposal
>> I propose that we allow `Type.withoutSpecialization`
>>
>> ``` swift
>> func flatMap<
>>         NewElement, SegmentOfResult : Collection, Output : Zipper1D where
>>         SegmentOfResult.Iterator.Element == NewElement, Output.Element ==
>> NewElement, Output.withoutSpecialization == Self.withoutSepcialization>
>>         (_ transform: @noescape (Element) throws -> SegmentOfResult)
>> rethrows -> Output
>> ```
>>
>>
>> I recognize that generic protocols are another possible solution to this
>> problem. I am pitching this because of how much closer this idea seems to
>> being realized.

The right answer to this problem is something called “higher-kinded
types,” which are interesting to contemplate for the future, but most
definitely out-of-scope at the moment.

Cheers,

-- 
-Dave



More information about the swift-evolution mailing list