<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Jul 11, 2013 at 6:07 PM, Felipe Almeida Lessa <span dir="ltr">&lt;<a href="mailto:felipe.lessa@gmail.com" target="_blank">felipe.lessa@gmail.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">On Thu, Jul 11, 2013 at 10:56 AM, Michael Snoyman &lt;<a href="mailto:michael@snoyman.com">michael@snoyman.com</a>&gt; wrote:<br>


&gt; The only<br>
&gt; approach that handles the situation correctly is John&#39;s separate thread<br>
&gt; approach (tryAll3).<br>
<br>
</div>I think you meant &quot;tryAll2&quot; here.  Got me confused for some time =).<br>
<br>
Cheers,<br>
<br>
--<br>
Felipe.<br>
</blockquote></div><br></div><div class="gmail_extra">Doh, yes, I did, thanks for the clarification.</div><div class="gmail_extra"><br></div><div class="gmail_extra">After playing around with this a bit, I was able to get an implementation of try, catch, and handle which work for any non-async exception, in monad transformers which are instances of MonadBaseControl (from monad-control). I&#39;ll try to write up my thoughts in something more coherent, likely a blog post.</div>

<div class="gmail_extra"><br></div><div class="gmail_extra">Michael</div></div>