[swift-evolution] [Idea] Generic associated types

Dave Abrahams dabrahams at apple.com
Sun Apr 23 12:58:00 CDT 2017


on Sat Mar 11 2017, Karl Wagner <swift-evolution at swift.org> wrote:

>> On 12 Mar 2017, at 06:51, Austin Zheng <austinzheng at gmail.com>
> wrote:
>> 
>> 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
>>> <swift-evolution at swift.org
>>> <mailto:swift-evolution at swift.org>>
>>> 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
>>> swift-evolution at swift.org
>>> <mailto:swift-evolution at swift.org>
>>> https://lists.swift.org/mailman/listinfo/swift-evolution
>> 
>
> Not necessarily. Higher-kinded types (IIUC) are per-instance -
> e.g. every instance of a Collection could have a unique type of Index.

No, that's “dependent types.”  Austin had it right.

-- 
-Dave



More information about the swift-evolution mailing list