Well, "hidden" - it *is* right there in the type signature still, it just doesn't *look* like an argument.
If you squint hard enough, (=>) looks like (->). Or maybe the other way round. Whatever. :)
It also might be optimized away in static cases (certainly, it *could* happen, whether does or is even worthwhile is another question).
The optimization at stake is specialization. Given (Num a => a), specialize it to Int or Double or X so that it's memoizably first-class, which is where functions still fall down [1]. All functions are values but data values still play nicer than others.
Isn't fixing this the real cure for the monomorphism restriction?