I totally agree with Derek.&nbsp; Which exception you get can vary with compiler version, compiler flags, time of day, phase of the moon, ...<br>It will be one in a set of exceptions, but you don&#39;t know which one.<br><br>&nbsp; -- Lennart
<br><br><div class="gmail_quote">On Nov 18, 2007 8:34 PM, Derek Elkins &lt;<a href="mailto:derek.a.elkins@gmail.com">derek.a.elkins@gmail.com</a>&gt; wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div><div></div><div class="Wj3C7c">On Sun, 2007-11-18 at 12:11 -0800, Iavor Diatchki wrote:<br>&gt; Hello,<br>&gt;<br>&gt; I was playing around with &quot;bang patterns&quot; and I noticed that<br>&gt; when combined with asynchronous exceptions they can lead to
<br>&gt; programs where the order of the declarations in a binding<br>&gt; group is important! &nbsp;Here is an example:<br>&gt;<br>&gt; &gt; import Control.Exception<br>&gt; &gt; import Prelude hiding (catch)<br>&gt; &gt;<br>
&gt; &gt; main = putStrLn =&lt;&lt; eval_order<br>&gt; &gt;<br>&gt; &gt; test = &quot;no exception&quot;<br>&gt; &gt; &nbsp; where !_ = error &quot;top down&quot;<br>&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; !_ = error &quot;bottom up&quot;<br>&gt; &gt;
<br>&gt; &gt; eval_order = evaluate test `catch` \e -&gt;<br>&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;case e of<br>&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ErrorCall txt -&gt; return txt<br>&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -&gt; throw e<br>&gt;
<br>&gt; Of course, this is a contrived exampled but, as far as I know,<br>&gt; this was not possible in Haskell before (if anyone has an example<br>&gt; to the contrary please send it to the list).<br>&gt;<br>&gt; By the way, with GHC 
6.8.1 the above program prints &quot;bottom up&quot;.<br>&gt; This means that when there are multiple &quot;banged&quot; bindings they<br>&gt; are evaluated starting with the last one in the text. &nbsp;I imagine<br>&gt; than in most programs this is not particularly important, but
<br>&gt; it seems to me that it would be a bit nicer if we were to adjust<br>&gt; the translation so that bindings were evaluated top to bottom<br>&gt; (e.g., like in ML).<br><br></div></div>The whole point of the &quot;imprecise exceptions&quot; paper was that any
<br>exception may be returned when multiple ones could be. &nbsp;There is no<br>reason why the bindings should be evaluated top-down. &nbsp;If you are<br>relying on the order the bindings are evaluated you are doing something<br>very, very wrong. &nbsp;Should we also specify what exception should be
<br>thrown for &nbsp;error &quot;left-right&quot; + error &quot;right-left&quot; ?<br><div><div></div><div class="Wj3C7c"><br>_______________________________________________<br>Haskell mailing list<br><a href="mailto:Haskell@haskell.org">
Haskell@haskell.org</a><br><a href="http://www.haskell.org/mailman/listinfo/haskell" target="_blank">http://www.haskell.org/mailman/listinfo/haskell</a><br></div></div></blockquote></div><br>