There was a proposal to allow protocols to be nested inside types at one point 
but it didn’t move forward.

Basically, if the outer type is a non-generic class, struct or enum, there’s no 
conceptual difficulty at all.

If the outer type is a generic type or another protocol, you have a problem 
where the inner protocol can reference generic parameters or associated types 
of the outer type. This would either have to be banned, or we would need to 
come up with coherent semantics for it:

struct Generic<T> {
  protocol P {
    func f() -> T
  }
}

struct Conforms : Generic<Int>.P {
  func f() -> Int { … } // Like this?
}

let c = Conforms()
c is Generic<String>.P // is this false? Ie, are Generic<Int>.P and 
Generic<String>.P different protocols?

Slava

> On Dec 24, 2017, at 6:53 PM, Kelvin Ma via swift-evolution 
> <[email protected]> wrote:
> 
> is there a reason why it’s not allowed to nest a protocol declaration inside 
> another type?
> _______________________________________________
> swift-evolution mailing list
> [email protected]
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to