When you finalize the library, consider quantifying over the scope type variable s last now that the order matters
newKey :: forall a s. KeyM s (Key s a)
newKey = KeyM $ \s -> Key (supplyName s)
This lets us write
-- CURRENT: newKey @_ @Int :: forall k (t :: k). KeyM t (Key t Int)
newKey @Int :: forall k (t :: k). KeyM t (Key t Int)