I have come across a limitation with swift protocols:
protocol P {
}
protocol Q: P {
}
protocol R  {
    var p: P { get set }
}
struct S: R {
    var p: Q
}
The code appears to be correct, however it won't build because S doesn't conform to protocol R, which requires a property of type P.
Struct S has a property of type Q which, by definition, extends P.
Is this a bug or by design?
and
Can anyone propose a workaround?