userError package:rebase

Construct an IOException value with a string describing the error. The fail method of the IO instance of the Monad class raises a userError, thus:
instance Monad IO where
...
fail s = ioError (userError s)
I/O error that is programmer-defined.
A programmer-defined error value constructed using userError.
I/O error that is programmer-defined.