As usual you can check:<div><br></div><div><div>Prelude Control.Applicative&gt; pure (||) &lt;*&gt; pure True &lt;*&gt; undefined</div><div>*** Exception: Prelude.undefined</div><div><br></div><div>Prelude Control.Applicative&gt; (||) True undefined</div>
<div>True</div><div><br></div><div><br></div><br><div class="gmail_quote">2012/3/16 Rouan van Dalen <span dir="ltr">&lt;<a href="mailto:rvdalen@yahoo.co.uk">rvdalen@yahoo.co.uk</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div><div style="font-size:10pt;font-family:Courier New,courier,monaco,monospace,sans-serif"><div>Hi everyone.</div><div><br></div><div>I was wondering if I can make assumptions about the evaluation order of</div><div>the following code:</div>
<div><br></div><div>isTrue :: Int -&gt; IO Bool</div><div>isTrue val = pure (||) &lt;*&gt; boolTest1 val &lt;*&gt; boolTest2 val</div><div><br></div><div><br></div><div>{- boolTest1 is an inexpensive, quick check -}</div>
<div>boolTest1 :: <span style="font-size:10pt">Int -&gt; IO Bool</span></div><div><span style="font-size:10pt">boolTest1 val = undefined<br></span></div><div><span style="font-size:10pt"><br></span></div><div><span style="font-size:10pt"><br>
</span></div><div><span style="font-size:10pt">{- boolTest2 is a very expensive check -} <br></span></div><div><span style="font-size:10pt">boolTest2 :: Int -&gt; IO
 Bool<br></span></div><div><span style="font-size:10pt">boolTest2 val = undefined</span></div><div><span style="font-size:10pt"><br></span></div><div><span style="font-size:10pt"><br></span></div><div>When using Applicative in the <span style="font-size:10pt">isTrue</span><span style="font-size:10pt"> function, I would like to make use of</span></div>
<div><span style="font-size:10pt">the short-circuit behaviour of || and rely on the fact that the boolTest1</span></div><div><span style="font-size:10pt">will be executed first.  The reason I am asking is because the boolTest functions</span></div>
<div><span style="font-size:10pt">are in the IO monad, instead of just returning pure Bool values.</span></div><div><span style="font-size:10pt"><br></span></div><div><span style="font-size:10pt">Regards</span></div><span class="HOEnZb"><font color="#888888"><div>
<span style="font-size:10pt">Rouan.</span></div><div><span style="font-size:10pt"><br></span></div></font></span></div></div><br>_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
<br></blockquote></div><br></div>