Proposal: Improved error message of "Error in array index"

Ketil Malde ketil at ii.uib.no
Wed Nov 9 04:25:32 EST 2005


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


More information about the Glasgow-haskell-users mailing list