[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