Is there a good reason why the type of Prelude.read is

read :: Read a => String -> a

rather than returning a Maybe value?

read :: Read a => String -> Maybe a

Since the string might fail to be parseable Haskell, wouldn't the latter be be more natural?

Or even an Either String a , where Left would contain the original string if it didn't parse, and Right the result if it did?

Edit:

I'm not trying to get others to write a corresponding wrapper for me. Just seeking reassurance that it's safe to do so.