
Hi All, Is there a program for expanding 'do' notation? I am trying to understand why the following code (from the Fannkuch entry) doesn't hold onto the list 'p' causing a space leak. main = do n <- getArgs >>= return . read . head let p = permutations [1..n] mapM_ (putStrLn . concatMap show) $ take 30 p putStr $ "Pfannkuchen(" ++ show n ++ ") = " putStrLn . show $ foldl' (flip (max . steps 0)) 0 p If I add a line which refers to 'p' at the end, there is a space leak. print (head p) Thanks. Cheers, David ---------without extra line ./Latest 9 +RTS -K256m -c -sstderr 123456789 ... Pfannkuchen(9) = 30 244,215,012 bytes allocated in the heap 613,972 bytes copied during GC 3,920 bytes maximum residency (1 sample(s)) 931 collections in generation 0 ( 0.06s) 1 collections in generation 1 ( 0.00s) 1 Mb total memory in use INIT time 0.00s ( 0.01s elapsed) MUT time 2.20s ( 2.72s elapsed) GC time 0.06s ( 0.13s elapsed) EXIT time 0.00s ( 0.00s elapsed) Total time 2.26s ( 2.86s elapsed) %GC time 2.7% (4.5% elapsed) Alloc rate 111,006,823 bytes per MUT second Productivity 97.3% of total user, 76.9% of total elapsed --------with extra line ./Latest 9 +RTS -K256m -c -sstderr ... Pfannkuchen(9) = 30 [1,2,3,4,5,6,7,8,9] 244,216,248 bytes allocated in the heap 19,804,816 bytes copied during GC 10,586,416 bytes maximum residency (6 sample(s)) 931 collections in generation 0 ( 0.96s) 6 collections in generation 1 ( 1.28s) 18 Mb total memory in use INIT time 0.00s ( 0.01s elapsed) MUT time 2.30s ( 2.72s elapsed) GC time 2.24s ( 3.15s elapsed) EXIT time 0.00s ( 0.00s elapsed) Total time 4.54s ( 5.88s elapsed) %GC time 49.3% (53.6% elapsed) Alloc rate 106,180,977 bytes per MUT second Productivity 50.7% of total user, 39.1% of total elapsed -------------------------------- David F. Place mailto:d@vidplace.com