Report an error rather than assuming it can't happen.
Make IO an instance of Functor.
Documented proposal for correct implementation.
Update some docs.