
Tomasz Zielonka wrote:
On Tue, Nov 08, 2005 at 02:43:47PM +0000, Malcolm Wallace wrote:
Of course, there is the old stand-by C pre-processor trick:
#define superError(s) error (s++"\nin file "++__FILE__ \ ++" at line "++__LINE__)
There is a nice trick I saw in darcs' code to make this even more Haskellish:
#define superError (\s -> error (s++"\nin file "++ __FILE__ \ ++" at line "++ show (__LINE__ :: Int)))
so you can simply write:
superError "message"
Don't you also need to define "head" as a CPP macro (otherwise you'll just get the location of "head", and I'm sure you know where to find that already)? #define head (\xs -> case xs of { (x:_) -> x ; _ -> superError "head: empty list"}) Unfortunately, I don't think CPP will play nicely with operators like ! :-( There really should be a better way to do this, "head: empty list", "read: no parse" etc is high on my list of Haskell annoyances. -k