## 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.
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution