Totally +1 here. On Mon, Mar 20, 2017 at 11:12 PM, Douglas Gregor via swift-evolution < [email protected]> wrote:
> > On Mar 11, 2017, at 9:49 PM, Karl Wagner <[email protected]> wrote: > > I have a model like this: > > protocol Promise { > associatedtype Result > } > > protocol Scanner { > associatedtype ScanPromise: Promise > > func promiseScan<T>(from: Offset, until: (Offset, Item) -> T?) -> > ScanPromise // where Result == T? > } > > > The thing that I’m trying to express is: whichever type implements the > associated type ‘ScanPromise’ must be generic, and that parameter must be > its result (i.e. something it got as a result of calling the “until” > closure). > > Even with SE-0142, this kind of constraint would not be possible. What I > would like to write is something like this: > > protocol Promise { > associatedtype Result > } > > protocol Scanner { > associatedtype ScanPromise<T>: Promise // now generic. [SE-0142]: > where Result == T > > func promiseScan<T>(from: Offset, until: (Offset, Item) -> T?) -> > ScanPromise<T> > } > > Thoughts? > > > Some of us who work on the Swift compiler have talked about this extension > to the model before, and we *think* it dodges some of the concerns about > introducing more-general higher-rank types in Swift while enabling > reasonable use cases like the one you provide. It seems like a reasonable > direction. > > Way out of scope for Swift 4 at this point, of course ;) > > - Doug > > > > _______________________________________________ > swift-evolution mailing list > [email protected] > https://lists.swift.org/mailman/listinfo/swift-evolution > >
_______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
