Namespace Wrapper Issue for protocol with associated types

I'm not very familiar with the implementation detail of SE0299. And I guess the problem is it can only infer 1 step search for generic type and in the final example of the problem there will be 2 search steps to resolve the generic type.

A potential ugly implementation is to block the spread of paradigms and make it two 1 step-search.

public struct XIGStatic<Content> {
    public init(_ content: Content.Type) {}
}
extension SwiftUI.ButtonStyle {
    public static var xig: XIGStatic<Self> { XIGStatic(Self.self) }
}

// Usage
public struct AnyButtonStyle: ButtonStyle {
    public func makeBody(configuration: Configuration) -> some View { ... } // Unimplement
}
extension ButtonStyle where Self == AnyButtonStyle {
    public static var xig: XIGStatic<AnyButtonStyle> { XIGStatic(AnyButtonStyle.self) }
}
struct HelloButtonStyle: ButtonStyle { ... }
extension XIGStatic where Content == AnyButtonStyle {
    var hello: some ButtonStyle { HelloButtonStyle() }
}
// Then we could final use the following code in business code 😂
Text("Hello").buttonStyle(.xig.hello) // 🎉

Looking forward to get your idea on this. cc @anandabits

Protocol metatype extensions (to better support SwiftUI)