> Prelude.head : empty list > Prelude.read : no parse > and Prelude.(!!) : index too large > and so on. > > Is there any easy way (TH?) to amend these to output the line number > of the offending caller?
In a program of any size, I usually avoid using these functions and instead define functions like: --| 1st arg is error message for empty lists head' :: Doc -> [a] -> a --| 1st arg is description of kind of thing in list -- Reports error if length of list /= 1 unique :: Doc -> [a] -> a etc. Another approach is to use a function: inContext :: String -> a -> a (implemented using mapException) like this: inContext "evaluating expression" (eval env e) to transform an exception of the form: error "Division by zero" into error "Division by zero while evaluating expression" Since the inContext function is rather like ghc's profiling function 'scc', it would be nice if ghc had a command-line flag to insert a call to inContext everywhere that it inserts a call to scc when you use -prof-all. (Of course, you'd probably take a big stack-space hit from doing so since the chain of calls to inContext is equivalent to the stack you would expect if using call by value without tail call optimization. -- Alastair Reid _______________________________________________ Haskell-Cafe mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell-cafe