Thanks again. Here is my solution in case that somebody else runs into similar problem. This isn&#39;t very elegant and I would be interested to know if somebody has a better solution. Surely many people have encountered this kind of problem where you want to force evaluation of some expression at given point of program flow. Here evaluation of sum must be forced for every update of array element or otherwise memory consumption is proportional to the number of samples (100 000) instead of being proportional to the size of the array (10).<br>
<br> ---<br>import <a href="http://Data.Array.IO">Data.Array.IO</a><br>import Test.QuickCheck<br>import System.Random<br><br>uniformSampler :: Gen Double<br>uniformSampler = choose (0,1)<br><br>withSeed sampler seed = generate 1 (mkStdGen seed) sampler<br>
<br>ac = 10<br>sc = 100000<br><br>triplet = do<br>&nbsp;&nbsp;&nbsp; i &lt;- uniformSampler<br>&nbsp;&nbsp;&nbsp; s &lt;- uniformSampler<br>&nbsp;&nbsp;&nbsp; t &lt;- uniformSampler<br>&nbsp;&nbsp;&nbsp; return (round $ i * fromIntegral ac, (s,t))<br><br>sampling = sequence $ repeat triplet<br>
samples = take sc $ withSeed sampling 1<br><br>showElems xs = foldr1 (++) [show x ++ &quot;\n&quot; | x &lt;- xs]<br><br>main = do <br>&nbsp;&nbsp;&nbsp; a1 &lt;- newArray (0,ac) 0 :: IO (IOUArray Int Double)<br>&nbsp;&nbsp;&nbsp; a2 &lt;- newArray (0,ac) 0 :: IO (IOUArray Int Double)<br>
&nbsp;&nbsp;&nbsp; let addtoElem i s t = do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s&#39; &lt;- readArray a1 i<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writeArray a1 i (s&#39;+s)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t&#39; &lt;- readArray a2 i<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writeArray a2 i (t&#39;+t)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writes = [addtoElem i s t | (i,(s,t)) &lt;- samples]<br>
&nbsp;&nbsp;&nbsp; sequence writes<br>&nbsp;&nbsp;&nbsp; ss &lt;- getElems a1<br>&nbsp;&nbsp;&nbsp; ts &lt;- getElems a2<br>&nbsp;&nbsp;&nbsp; putStrLn $ showElems (zip ss ts) <br>---<br><br>Regards, <br>Lauri<br><br><br><div class="gmail_quote">On Fri, May 16, 2008 at 2:52 PM, Abhay Parvate &lt;<a href="mailto:abhay.parvate@gmail.com">abhay.parvate@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;">As far as I know, you can&#39;t. It needs machine representable types, such as Int, Double, Char, etc. But making a tuple of three UArray Int Double may help.<br>
<br><div class="gmail_quote">2008/5/16 Lauri Oksanen &lt;<a href="mailto:lassoken@gmail.com" target="_blank">lassoken@gmail.com</a>&gt;:<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">Thanks for help. I did some tests with UArray and it does the trick. <br>
The problem remaining is, how to implement UArray Int (Double, Double, Double)?<br>
UArray source code is far too cryptic for me. <br><br>Regards,<br>
Lauri<br><br><div class="gmail_quote">On Fri, May 16, 2008 at 11:37 AM, Bulat Ziganshin &lt;<a href="mailto:bulat.ziganshin@gmail.com" target="_blank">bulat.ziganshin@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;">


Hello Lauri,<br>
<br>
Friday, May 16, 2008, 12:19:29 PM, you wrote:<br>
<br>
&gt; &nbsp;&nbsp;&nbsp;&nbsp; pixelArray :: Array Int Color<br>
<br>
it&#39;s boxed array which means that its elements are stored as thunks<br>
computed only when you actually use them. try UArray instead:<br>
<br>
<a href="http://haskell.org/haskellwiki/Modern_array_libraries" target="_blank">http://haskell.org/haskellwiki/Modern_array_libraries</a><br>
<font color="#888888"><br>
<br>
--<br>
Best regards,<br>
&nbsp;Bulat &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mailto:<a href="mailto:Bulat.Ziganshin@gmail.com" target="_blank">Bulat.Ziganshin@gmail.com</a><br>
<br>
</font></blockquote></div><br>
<br></div></div>_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org" target="_blank">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>
</blockquote></div><br>