Thanks for the reply.<br><br>My main is now:<br><br>main = do<br>  let as = [1..2e7] :: [Double]<br>  start &lt;- getCurrentTime<br>  let meanAs = mean as<br>  let meanOver2 = meanAs `deepseq` meanAs / 2<br>  end &lt;- getCurrentTime<br>
  putStrLn (show (end `diffUTCTime` start))<br>  start &lt;- getCurrentTime<br>  putStrLn (show meanOver2)<br>  end &lt;- getCurrentTime<br>  putStrLn (show (end `diffUTCTime` start))<br><br>The time is still spent on the show meanOver2 command :(<br>
<br>Frank<br><br><div class="gmail_quote">On Thu, Jun 24, 2010 at 9:11 PM, Ivan Miljenovic <span dir="ltr">&lt;<a href="mailto:ivan.miljenovic@gmail.com">ivan.miljenovic@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<div><div></div><div class="h5">On 25 June 2010 10:57, Frank Moore &lt;<a href="mailto:fmoore@gmail.com">fmoore@gmail.com</a>&gt; wrote:<br>
&gt; Hello Haskellers,<br>
&gt;<br>
&gt; I am new to programming in Haskell and I am having trouble understanding<br>
&gt; exactly when statements become evaluated.  My goal is to try and measure how<br>
&gt; long a computation takes without having to use a show function.  The code I<br>
&gt; am trying to use is below (taken in part from RWH chapter 25)<br>
&gt;<br>
&gt; ----------------------------------<br>
&gt; import Data.List (foldl&#39;)<br>
&gt; import Data.Time.Clock (diffUTCTime, getCurrentTime)<br>
&gt; import Control.DeepSeq (deepseq)<br>
&gt;<br>
&gt; mean :: [Double] -&gt; Double<br>
&gt; mean xs = s / fromIntegral n where<br>
&gt;     (n,s) = foldl&#39; k (0,0) xs<br>
&gt;     k (n,s) x = n `seq` s `seq` (n+1,s+x)<br>
&gt;<br>
&gt; main = do<br>
&gt;   let as = [1..1e7] :: [Double]<br>
&gt;   start &lt;- getCurrentTime<br>
&gt;   let meanOver2 = deepseq (mean as) `seq` (mean as) / fromIntegral 2<br>
&gt;   end &lt;- getCurrentTime<br>
&gt;   putStrLn (show (end `diffUTCTime` start))<br>
&gt;   putStrLn (show meanOver2)<br>
&gt; -------------------------------------<br>
&gt;<br>
&gt; My understanding of deepseq was that it evaluates (mean as) completely<br>
&gt; before continuing, and then the show would not take any time, but instead<br>
&gt; all the time is spent in the show meanOver2 function.  I feel like I am<br>
&gt; missing something fundamental here.  Any suggestions?  Thanks for your help.<br>
<br>
</div></div>It does... but because you don&#39;t save the result it doesn&#39;t keep the<br>
result (you&#39;re wanting Common Sub-expression Elimination, which GHC<br>
doesn&#39;t do).<br>
<br>
Try this:<br>
<br>
let meanAs = mean as<br>
    meanOver2 = meanAs `deepSeq` meanAs / 2<br>
<br>
Note that your usage of &quot;fromIntegral&quot; isn&#39;t required, as that is<br>
automatically done for any integral literal (but if you had 2 in an<br>
Int variable then you would need fromIntegral).<br>
<font color="#888888"><br>
<br>
--<br>
Ivan Lazar Miljenovic<br>
<a href="mailto:Ivan.Miljenovic@gmail.com">Ivan.Miljenovic@gmail.com</a><br>
<a href="http://IvanMiljenovic.wordpress.com" target="_blank">IvanMiljenovic.wordpress.com</a><br>
</font></blockquote></div><br><br clear="all"><br>-- <br>Dr. W. Frank Moore<br>H. C. Wang Assistant Professor<br>Department of Mathematics, Cornell University<br>310 Malott Hall, Ithaca NY 14853-4201, USA<br><br>Office: Malott 587, Phone: +1 607 255 4030<br>
Email: <a href="mailto:frankmoore@math.cornell.edu">frankmoore@math.cornell.edu</a><br>