Improving the UI of generics

print(P.Protocol.self) // this one is new to me that it compiles.

Here is what I mean, I asked Joe long long time ago if there is any good workaround to this problem but I doubt the situation changed since then:

protocol P {}

func whatAmI<T>(_ t: T.Type) {
  print(type(of: t))
}

whatAmI(P.self)              // P.Protocol
whatAmI(P.Type.self)         // P.Type.Protocol
whatAmI(P.Protocol.self)     // P.Protocol.Type
whatAmI(Any.Type.self)       // Any.Type.Protocol
whatAmI(AnyObject.Type.self) // AnyObject.Type.Protocol