```
def approximate(tp: Type) = {
  val undetparams = tp collect { case tp if tp.typeSymbol.isTypeParameter => tp.typeSymbol }
  deriveTypeWithWildcards(undetparams)(tp)
}
```

  - `typeSymbol` is cached
  - `isTypeParameter` implies `!isSkolem`:

```
def isTypeParameter         = isTypeParameterOrSkolem && !isSkolem
```