On Feb 2, 2008 12:11 PM, Chaddaï Fouché &lt;<a href="mailto:chaddai.fouche@gmail.com">chaddai.fouche@gmail.com</a>&gt; wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
To address this I propose this function :<br>foldl1MArray&#39; :: (MArray a e m, Ix i) =&gt; (e -&gt; e -&gt; e) -&gt; a i e -&gt; m e<br>foldl1MArray&#39; f a = do<br> &nbsp;(l,u) &lt;- getBounds a<br> &nbsp;firstElem &lt;- readArray a l<br>
 &nbsp;foldM (\a mb -&gt; a `seq` mb &gt;&gt;= return . f a)<br> &nbsp; &nbsp; &nbsp; &nbsp;firstElem (map (readArray a) (range (l,u)))<br></blockquote></div><br><br><span style="font-family: arial,sans-serif;">I played with your foldl1MArray&#39; last night.&nbsp; I noticed it can be reduced to . . .</span><br>
<br><span style="font-family: courier new,monospace;">foldl1MArray&#39; :: (MArray a e m, Ix i) =&gt; (e -&gt; e -&gt; e) -&gt; a i e -&gt; m e</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">foldl1MArray&#39; f a = do</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp; (l,u) &lt;- getBounds a</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp; foldl1&#39; (liftM2 f) (map (readArray a) (range (l,u)))</span><br style="font-family: courier new,monospace;">
<br><font face="arial,sans-serif">Unfortunately, my new version consumes a lot of stack and heap space.&nbsp; Why is this so inefficient?&nbsp; Is there a simple change that will make it efficient?<br><br><br></font>