[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