on Fri Jul 01 2016, "T.J. Usiyan via swift-evolution" <[email protected]> wrote:
> Bump > > On Fri, Jul 1, 2016 at 11:56 AM, T.J. Usiyan > <[email protected]> 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 _______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
