Forcing the exception to WHNF doesn't do anything to resolve any of the other bottom values you might attempt to force inside your exception handler contained inside the thrown exception value. I think that the current behavior makes sense as it exists now. I'd prefer not making throwIO more magical. The user of throwIO throwing a potentially undefined exception value should take care to evaluate the exception before throwing it if that is a concern.
Did this happen in some code somewhere that you discovered? It might be more compelling if we could see how this came up it some otherwise reasonable code.
Regards,
Eric Mertens