Use `Infinite` where appropriate and clean up some partial uni patterns.
We can use Infinite
appropriately in at least a few situations: unique generation, and lists of names in GHC.Tc.Deriv.Functor
and GHC.Runtime.Debugger
. Also, at some sites where we clone or subst binders, we can use more precise types to avoid partial uni patterns.
Allows us to drop the losing instance MonadFail UniqSM
.
Also slightly decreases allocation across the testsuite.