Why not simply use the existing `fail :: String -> IO a` method instead?
The differences & similiarities I see wrt `fail`:
- `die` throws an `ExitCode` exception, whereas `fail` throws an
`IOError` exception
- Both result in the message written to stderr and a non-zero exit code