
Josh, In general you'll find the haskell-cafe (haskell-cafe@haskell.org) to be a more lively place for this type of discussion, but since we're here I might as well mention that memory use of a Haskell function is one of the hardest things to gain an understanding about.
main = print (show (sum [x | x <- [3..999], x `mod` 3 == 0 || x `mod` 5 == 0])) I want to know if the list was ever actually constructed in memory.
For such a simple program I suggest you test with lists of various lengths: ---------------- main with n == 999 ------------------- [tommd@Mavlo Test]$ ghc --make -O2 opt.hs [1 of 1] Compiling Main ( opt.hs, opt.o ) Linking opt ... [tommd@Mavlo Test]$ ./opt +RTS -sstderr ./opt +RTS -sstderr "233168" 94,604 bytes allocated in the heap 700 bytes copied during GC 17,144 bytes maximum residency (1 sample(s)) 23,816 bytes maximum slop 1 MB total memory in use (0 MB lost due to fragmentation) Generation 0: 0 collections, 0 parallel, 0.00s, 0.00s elapsed Generation 1: 1 collections, 0 parallel, 0.00s, 0.00s elapsed INIT time 0.00s ( 0.00s elapsed) MUT time 0.00s ( 0.00s elapsed) GC time 0.00s ( 0.00s elapsed) EXIT time 0.00s ( 0.00s elapsed) Total time 0.00s ( 0.00s elapsed) %GC time 0.0% (14.0% elapsed) Alloc rate 47,325,662 bytes per MUT second Productivity 0.0% of total user, 0.0% of total elapsed ---------------------------------------------------------------- ---------------- main with n == 10000000 ------------------- [tommd@Mavlo Test]$ ./opt +RTS -sstderr ./opt +RTS -sstderr "23333341666668" 906,451,272 bytes allocated in the heap 128,992 bytes copied during GC 18,104 bytes maximum residency (1 sample(s)) 18,760 bytes maximum slop 1 MB total memory in use (0 MB lost due to fragmentation) Generation 0: 1742 collections, 0 parallel, 0.01s, 0.01s elapsed Generation 1: 1 collections, 0 parallel, 0.00s, 0.00s elapsed INIT time 0.00s ( 0.00s elapsed) MUT time 0.99s ( 1.02s elapsed) GC time 0.01s ( 0.01s elapsed) EXIT time 0.00s ( 0.00s elapsed) Total time 1.00s ( 1.03s elapsed) %GC time 0.6% (1.0% elapsed) Alloc rate 912,980,911 bytes per MUT second Productivity 99.4% of total user, 96.7% of total elapsed ----------------------------------------------------------- So obviously there was a lot more data moving around but no significant difference in maximum memory use - a good sign!
The C it produced with '-fvia-C -C' was totally unreadable
Deprecating the via-C compilation path has been discussed - hopefully no one ever suggested it as a useful path for human inspection. Thomas