Can anybody explain why exceptions may be thrown outside the IO monad, but may only be caught inside it?