I think you want higher-kinded types. 
https://github.com/apple/swift/blob/master/docs/GenericsManifesto.md#higher-kinded-types
 
<https://github.com/apple/swift/blob/master/docs/GenericsManifesto.md#higher-kinded-types>

Best,
Austin

> On Mar 11, 2017, at 9:49 PM, Karl Wagner via swift-evolution 
> <[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?
> 
> - Karl
> _______________________________________________
> 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

Reply via email to