Proposal: Add Text.Read.maybeRead :: Read a => String -> Maybe a

Ross Paterson ross at soi.city.ac.uk
Fri Feb 15 19:38:21 EST 2008


On Fri, Feb 08, 2008 at 09:35:34PM +0100, Twan van Laarhoven wrote:
> David Menendez wrote:
>>> Isn't the MonadPlus approach also by-default-safe?
>>
>> Safe, yes, but is it more useful?
>
> Yes. In this case, take a parsing monad for example. You could write:
>
>   parseInt :: CharParser () Int
>   parseInt = do ds <- many digit
>                 readM ds
>
> And it would work automatically. A reading error would be propagated to 
> the parser monad, and it would backtrack/report the error/whatever.

In this example a read error indicates a bug, which you'd want to treat
differently from a syntax error in the input.

If one were using read as part of the parsing process, one could give
better messages with something like

    parseInt :: CharParser () Int
    parseInt = do ds <- many alphaNum
                  fromMaybe (fail "integer expected") $
                      maybeRead ds


More information about the Libraries mailing list