This seems like a lot of obfuscation to avoid declaring a val or calling asType twice, neither of which will hurt that badly. In fact, is there something taking place in lines 365-375 which is not captured by this line:
```
TypeConKind(tpe.typeParams map (p => Argument(p.variance, apply(p))(p)))
```
...maybe something involving bivariance? Perhaps you would like a method on Variance which maps bivariant to invariant and leaves the others alone. Although I'm curious what situation arises where one encounters bivariance on types one wishes to print.