Hi David,

Re: this comment from catchI:

> It is not possible to catch asynchronous exceptions, such as lazily evaluated 
> divide-by-zero errors, the throw function, or exceptions raised by other 
> threads using throwTo if those exceptions might arrive anywhere outside of a 
> liftIO call.

It might be worth investigating providing a version which can catch
asynchronous exceptions if the underlying monad supports it (via
MonadCatchIO or something similar). One of the most interesting
advantages I can see for IterIO over the other iteratee
implementations is that you actually have some control over resource
usage -- not being able to catch asynchronous exceptions nullifies
much of that advantage. A clear use case for this is timeouts on
server threads, where you typically throw a TimeoutException exception
to the handling thread using "throwTo" if the timeout is exceeded.

Another question re: resource cleanup: in the docs I see:

> Now suppose inumHttpBody fails (most likely because it receives an EOF before 
> reading the number of bytes specified in the Content-Length header). Because 
> inumHttpBody is fused to handler, the failure will cause handler to receive 
> an EOF, which will cause foldForm to fail, which will cause handleI to 
> receive an EOF and return, which will ensure hClose runs and the file handle 
> h is not leaked.

> Once the EOFs have been processed, the exception will propagate upwards 
> making inumHttpServer fail, which in turn will send an EOF to iter. Then the 
> exception will cause enum to fail, after which sock will be closed. In 
> summary, despite the complex structure of the web server, because all the 
> components are fused together with pipe operators, corner cases like this 
> just work with no need to worry about leaked file descriptors.

Could you go into a little bit of detail about the mechanism behind this?

Thanks!

G
-- 
Gregory Collins <g...@gregorycollins.net>

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to