[Haskell-cafe] Re: [Haskell] ANNOUNCE: control-monad-exception 0.5
with monadic call traces
Jose Iborra
pepeiborra at gmail.com
Tue Nov 3 08:59:57 EST 2009
On 03/11/2009, at 14:24, Henning Thielemann wrote:
> Jose Iborra schrieb:
>> Folks,
>>
>> I'm happy to announce a new release of control-monad-exception with
>> monadic call traces,
>> available in Hackage. Grab it now while it is still online!
>>
>> Monadic stack traces are described in detail in a blog post [1].
>>
>> In short, what this means for your code is the ability to generate
>> errors like this:
>>
>> 500 Internal Server Error
>> The CGI server failed with the following error:
>> DeleteException (BmPK 2009-10-26 19:39:51.031297 UTC "Testing RPO")
>> in deleteBenchmarkFromPK,
>> NarradarBenchmarkDB(src/NarradarBenchmarkDB.hs): (186, 44)
>> deleteBenchmarkFromPK,
>> NarradarBenchmarkDB(src/NarradarBenchmarkDB.hs): (186, 25)
>> deleteBenchmarkFromPK,
>> NarradarBenchmarkDB(src/NarradarBenchmarkDB.hs): (184, 17)
>> deleteBenchmarkFromPK,
>> NarradarBenchmarkDB(src/NarradarBenchmarkDB.hs): (180, 90)
>> deleteTests, NarradarBenchmarkCGI(src/NarradarBenchmarkCGI.hs):
>> (108, 3)
>> deleteTests, NarradarBenchmarkCGI(src/NarradarBenchmarkCGI.hs):
>> (106, 20)
>> cgiMain, NarradarBenchmarkCGI(src/NarradarBenchmarkCGI.hs): (52,
>> 33)
>> cgiMain, NarradarBenchmarkCGI(src/NarradarBenchmarkCGI.hs): (52,
>> 30)
>> cgiMain, NarradarBenchmarkCGI(src/NarradarBenchmarkCGI.hs): (50,
>> 9)
>> cgiMain, NarradarBenchmarkCGI(src/NarradarBenchmarkCGI.hs): (46,
>> 11)
>
> Sure, this is a nice functionality. But isn't it about debugging, not
> exception handling? Internal Server Error means to me, the server
> has a
> bug, thus we want to know, how to reproduce it, thus the stack trace.
> For handling expected irregularites, what exceptions are, you would
> not
> need that, right?
>
This is about error handling and reporting.
Catching an exception does not tell you where the exception comes
from, in the
same way that a "head of empty list" error does not point at the
source of the error.
You need a stack trace to know that.
So the output above, generated by a regular exception handler
> cgiMain
> `catchWithSrcLoc`
> \loc e at SomeException{} ->
> outputInternalServerError [ "The Narradar CGI server
failed with the following error:"
> , showExceptionWithTrace loc
e]
gives you that kind of information.
What you do with the stack trace, printing it (currently it is simply
a list
of Strings) or something else, is your choice.
Thanks,
pepe
More information about the Haskell-Cafe
mailing list