That's right, there is no way to produce an any P.Type from a T.Type by substitution; you'll always get an (any P).Type. The type(of:) operation in the expression type checker does this as a special case, but the type of type(of:) cannot be expressed in the type system.