>The "internal, ambiguous type" matters when you try to actually invoke (show . read) on some String
There is no internal ambiguous type. It is not a concrete type, it is a type variable. But it is inferred just fine. It is (Read a => a).
>which would lead many people to say that (show . read) is not "inferred just fine."
Even if you were to erroneously say that, it isn't type classes that is the problem.