<br><br><div><span class="gmail_quote">On 1/7/06, <b class="gmail_sendername">Chris Kuklewicz</b> &lt;<a href="mailto:haskell@list.mightyreason.com">haskell@list.mightyreason.com</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
When you put &quot;print (head p)&quot; at then end, it keeps a reference to the<br>whole list &quot;p&quot; which is your space leak.&nbsp;&nbsp;If you want to store the head<br>of p, this *should* work:<br><br>&gt; main = do n &lt;- getArgs &gt;&gt;= return . read . head
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; let p = permutations [1..n]<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; headOfP &lt;- return (head p)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mapM_ (putStrLn . concatMap show) $ take 30 p<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; putStr $ &quot;Pfannkuchen(&quot; ++ show n ++ &quot;) = &quot;
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; putStrLn . show $ foldl' (flip (max . steps 0)) 0 p<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print headOfP<br><br>The &quot;headOfP&quot; is computed as an IO action at that point in the program,<br>so &quot;headOfP&quot; does not hold a reference to &quot;p&quot; as a whole.
</blockquote><div><br>Without having tried this I'd say that you should use Control.Excection.evaluate instead of 'return'. Or you could use 'seq'. I suspect that otherwise the 'head p' will not be evaluated until the last line and you will have the same problem as before.
<br></div><br>Cheers,<br><br>/Josef<br></div>