[Haskell-cafe] How to make Prelude.read: no parse more verbose ...

Don Stewart dons at galois.com
Wed Dec 19 18:43:51 EST 2007


g_sauthoff:
> Hi,
> 
> I try to debug some existing Haskell-Code. Out of the blue I get a
> 'progname: Prelude.read: no parse'
> error message from GHC.
> 
> Great.
> 
> Well, the code includes
> 
> # grep '\<read\>' *| wc -l
> 23 (sic!)
> 
> calls to the read fn.
> 
> Well, how do I compile a Haskell program in such a way, that I
> get a useful error message from read? I mean, like the
> filename/linenumber of the calling expression for starters.
> 
> Really crazy would be the possibility to print out a backtrace,
> if some (library) function calls error ...

ghci now has a debugger that can backtrace like this, see this 
blog post for more details.

    http://cgi.cse.unsw.edu.au/~dons/blog/2007/11/14#no-exceptions

using reads or even read lifted to a monad, like this, can be 
very useful, if it is code you control:

   readM :: (Monad m, Read a) => String -> m a
   readM s = case [x | (x,t) <- reads s, ("","")  <- lex t] of
        [x] -> return x
        []  -> fail "readM: no parse"
        _   -> fail "readM: ambiguous parse"
 
since you can handle failure without throwing an async exception.

-- Don


More information about the Haskell-Cafe mailing list