[swift-evolution] [Idea] Generic associated types
Karl Wagner
razielim at gmail.com
Sun Apr 23 15:22:30 CDT 2017
> On 23 Apr 2017, at 19:58, Dave Abrahams via swift-evolution <swift-evolution at swift.org> wrote:
>
>
> 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
>
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
Ah, well I learned something today.
- Karl
More information about the swift-evolution
mailing list