On Tue, Aug 03, 2004 at 12:51:50PM +0200, Ketil Malde wrote: > Is there any easy way (TH?) to amend these to output the line number > of the offending caller? It would be a great improvement to see > something like > > Prelude.head : empty list in Foo.hs, line 4711 > > since programs generally contain many, many calls to functions like > these.
I include the following file in most files (and always use the C preprocessor): import DarcsUtils ( bug ) #define impossible (bug $ "Impossible case at "++__FILE__++":"++show (__LINE__ :: Int)++" compiled "++__TIME__++" "++__DATE__) #define fromJust (\m -> case m of {Nothing -> bug ("fromJust error at "++__FILE__++":"++show (__LINE__ :: Int)++" compiled "++__TIME__++" "++__DATE__); Just x -> x}) Here "bug" is a function that just calls "error" with a little prefix explaining that there is a bug in darcs, and would the user please report it. Obviously, defining a head here would be just as easy, but I usually have more trouble with fromJust, which in a few places gets called in internal routines where I *should* know that the data structure has no Nothings, but have been known to make mistakes. I also catch all "error" exceptions and print a nicer error message, so I use fail and error "raw" to indicate actual user errors. -- David Roundy http://www.abridgegame.org _______________________________________________ Haskell-Cafe mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell-cafe