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

>> On 12 Mar 2017, at 06:51, Austin Zheng <austinzh...@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@swift.org
>>> <mailto:swift-evolution@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@swift.org
>>> <mailto:swift-evolution@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@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to