This would be crazy expensive in the general case, because it makes no effort whatsoever to avoid creating new objects. Every Annotated/Existential/Poly/Nullary type is copied on every call, even if the transform itself is the identity.

TypeMaps have logic to avoid unnecessary copies; that's much of why they exist. You shouldn't be writing anything which transforms Types which does not leverage TypeMap.