Error catching in WAI and Warp

I has problem with error catching in WAI+Warp. Because, as I understand it, all response lives in Iteratee monad. And ofcourse all code is lazy. I found this gist: https://gist.github.com/1267589 - it helps to catch non-lazy errors (I just make WAI middleware). But if error occurs in lazy code:
responseLBS status200 [] undefined
... all dies. All errors goes to line 14 and Warp sends "200/OK" with empty response instead, for example '500/Internal Server Error'. How could handle all the errors?

On Fri, Dec 16, 2011 at 12:22 AM, Alexander Dorofeev
I has problem with error catching in WAI+Warp. Because, as I understand it, all response lives in Iteratee monad. And ofcourse all code is lazy.
I found this gist: https://gist.github.com/1267589 - it helps to catch non-lazy errors (I just make WAI middleware). But if error occurs in lazy code:
responseLBS status200 [] undefined
... all dies. All errors goes to line 14 and Warp sends "200/OK" with empty response instead, for example '500/Internal Server Error'.
How could handle all the errors?
I believe the only way to ensure this is to fully evaluate your response before sending it to the server, and catching exceptions during the evaluation. Also note that for a ResponseEnumerator, this is by definition impossible: you'll be running IO code (which can always fail) interleaved with your response body. This is the very reason why, for most Yesod responses, I recommend avoiding ResponseEnumerator, except for special circumstances like very large output or times when it doesn't matter if the user gets a corrupted page. Michael
participants (2)
-
Alexander Dorofeev
-
Michael Snoyman