[swift-evolution] [Draft] Allow multiple conformances to the same protocol
Vladimir.S
svabox at gmail.com
Thu Jun 9 09:25:08 CDT 2016
I like the idea as associatedtype is playing the role of generic type and
in extension we conforms to the protocol with some specific generic type as
associated type.
I mean the first idea probably could be
protocol From<T> {
init(_ value: T)
}
but "protocols do not allow generic parameters; use associated types
instead", so it seems natural to express concrete type as associated type
for protocol in generic syntax <Type>
Probably alternative syntax could look like:
extension Int : From where .FromType = Float { }
Also, it seems like this proposal could help to solve a problem with the
same name of associated type in different protocols:
protocol One {
associatedtype Element
func foo(t: Element)
}
protocol Two {
associatedtype Element
func bar(t: Element)
}
struct OneTwo : One, Two {
func foo(t: Int) {}
func bar(t: String) {}
}
// type 'OneTwo' does not conform to protocol 'Two'
// candidate has non-matching type '(t: String) -> ()' [with Element = Element]
So, as I understand, will be possible
struct OneTwo : One, Two<String> {
func foo(t: Int) {} // OneTwo.Element will be Int
func bar(t: String) {}
}
On 08.06.2016 22:07, Антон Жилин via swift-evolution wrote:
> ==Motivation==
>
> protocol From {
> associatedtype FromType
> init(_ value: FromType)
> }
>
> The problem is, one type cannot implement multiple From "conversions".
>
> ==Proposed solution==
>
> Allow specifying all associated types using generic syntax.
>
> extension Int : From<Float> { }
> extension Int : From<Double> { }
>
> This is only allowed in conformance declarations.
>
> ==Future directions==
>
> We can replace all *Convertible protocols with From and Into, which will be
> defined similarly to Rust.
>
> - Anton
>
>
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
>
More information about the swift-evolution
mailing list