I was hoping this code would compile, but it does not:
protocol A {
associatedtype T
}
protocol B: A where T == Int {
}
var demo: B? = nil
I get the usual error: Protocol 'B' can only be used as a generic constraint because it has Self or associated type requirements. Is this error logically necessary in the same way as it is for fully fledged PATs? Or is the code above perfectly well-defined, and the compiler is simply lacking the necessary implementation?
9 Likes
Jumhyn
(Frederick Kellison-Linn)
2
There was a related discussion here a few weeks back. I believe that this is an implementation limitation—this sort of construct would fall out naturally as a consequence of generalized existentials, there just hasn't been enough development effort focused in that area to allow your example to compile.
1 Like
Joe_Groff
(Joe Groff)
3
I don't think there are any implementation limitations that would prevent this from being supported now.
9 Likes
spadafiva
(Joe Spadafora)
4
Do you think this would fall under the category of bug/fix improvement, or would it need an evolution proposal to move forward?
Joe_Groff
(Joe Groff)
5
I think it'd be worth an evolution proposal, just to give us time to discuss possible consequences.
4 Likes
Joe_Groff
(Joe Groff)
6
It looks like @anthonylatsis and @Slava_Pestov had worked on a PR to implement this not long ago:
https://github.com/apple/swift/pull/21576
10 Likes
CTMacUser
(Daryle Walker)
7
I also just came up with a similar thread.
2 Likes
What a dinosaur!
I am keen to give it another go anytime soon, though.
5 Likes
Is anyone working on a proposal? I am willing to write - or to help write - the proposal. With @anthonylatsis help in the implementation and his experience in this issue, I’m positive we could finally fix this agitating behavior of the generics system.
1 Like
Hi Filip, that sounds great! Unless one is already under way, consider opening a PR against GitHub - apple/swift-evolution: This maintains proposals for changes and user-visible enhancements to the Swift Programming Language. once you have a draft ready so we can launch a pitch and all start discussing, reviewing and refining the proposal together.
2 Likes
Hi guys (@filip-sakel, @anthonylatsis), I just wanted to poke you both with regard to this feature because it came up again in my work just now, and I'll breath such a sigh of relief when this feature is eventually deployed. I myself am totally swamped with coding items on my todo list so I understand entirely that you guys may not have the time, but I just want to express the gratitude that I'll have if you do end up implementing it!
1 Like
Hey Jeremy, the proposal is in progress, we just need some time to wrap things up and launch the review process.
Speaking of which, legitimate examples of real-world applications would be very helpful in improving the motivation!
4 Likes