
I just profiled all three and have not found them to be different. Maybe I'm reading my profiler output wrong so I've pasted it below. The compilation command I used was: ghc -fforce-recomp -XBangPatterns -prof -rtsopts -auto-all -o ListCrossProductSum ListCrossProductSum.hs They were all invoked using: main = print $ sumCheck 5000 [1..10000] [1..10000] I am running GHC 7.0.1 -deech sumcheck1: ========== Wed Jul 27 00:26 2011 Time and Allocation Profiling Report (Final) ListCrossProductSum +RTS -p -RTS total time = 0.00 secs (0 ticks @ 20 ms) total alloc = 344,084 bytes (excludes profiling overheads) COST CENTRE MODULE %time %alloc sums Main 0.0 40.7 main Main 0.0 58.3 individual inherited COST CENTRE MODULE no. entries %time %alloc %time %alloc MAIN MAIN 1 0 0.0 0.0 0.0 100.0 CAF Main 240 2 0.0 0.2 0.0 99.2 main Main 246 1 0.0 58.3 0.0 99.0 sumCheck Main 247 1 0.0 0.0 0.0 40.7 sums Main 248 1 0.0 40.7 0.0 40.7 CAF GHC.Show 236 1 0.0 0.0 0.0 0.0 CAF GHC.IO.Handle.FD 176 2 0.0 0.4 0.0 0.4 CAF System.Posix.Internals 175 1 0.0 0.0 0.0 0.0 CAF GHC.IO.Handle.Internals 140 1 0.0 0.0 0.0 0.0 CAF GHC.IO.Encoding.Iconv 134 2 0.0 0.3 0.0 0.3 CAF GHC.Conc.Signal 131 1 0.0 0.1 0.0 0.1 sumcheck2 ========= [1 of 1] Compiling Main ( ListCrossProductSum.hs, ListCrossProductSum.o ) True Wed Jul 27 00:27 2011 Time and Allocation Profiling Report (Final) ListCrossProductSum +RTS -p -RTS total time = 0.00 secs (0 ticks @ 20 ms) total alloc = 344,084 bytes (excludes profiling overheads) COST CENTRE MODULE %time %alloc sums Main 0.0 40.7 main Main 0.0 58.3 individual inherited COST CENTRE MODULE no. entries %time %alloc %time %alloc MAIN MAIN 1 0 0.0 0.0 0.0 100.0 CAF Main 240 2 0.0 0.2 0.0 99.2 main Main 246 1 0.0 58.3 0.0 99.0 sumCheck Main 247 1 0.0 0.0 0.0 40.7 sums Main 248 1 0.0 40.7 0.0 40.7 CAF GHC.Show 236 1 0.0 0.0 0.0 0.0 CAF GHC.IO.Handle.FD 176 2 0.0 0.4 0.0 0.4 CAF System.Posix.Internals 175 1 0.0 0.0 0.0 0.0 CAF GHC.IO.Handle.Internals 140 1 0.0 0.0 0.0 0.0 CAF GHC.IO.Encoding.Iconv 134 2 0.0 0.3 0.0 0.3 CAF GHC.Conc.Signal 131 1 0.0 0.1 0.0 0.1 sumcheck3 ========= ListCrossProductSum +RTS -p -RTS total time = 0.00 secs (0 ticks @ 20 ms) total alloc = 344,084 bytes (excludes profiling overheads) COST CENTRE MODULE %time %alloc sums Main 0.0 40.7 main Main 0.0 58.3 individual inherited COST CENTRE MODULE no. entries %time %alloc %time %alloc MAIN MAIN 1 0 0.0 0.0 0.0 100.0 CAF Main 240 2 0.0 0.2 0.0 99.2 main Main 246 1 0.0 58.3 0.0 99.0 sumCheck Main 247 1 0.0 0.0 0.0 40.7 sums Main 248 1 0.0 40.7 0.0 40.7 CAF GHC.Show 236 1 0.0 0.0 0.0 0.0 CAF GHC.IO.Handle.FD 176 2 0.0 0.4 0.0 0.4 CAF System.Posix.Internals 175 1 0.0 0.0 0.0 0.0 CAF GHC.IO.Handle.Internals 140 1 0.0 0.0 0.0 0.0 CAF GHC.IO.Encoding.Iconv 134 2 0.0 0.3 0.0 0.3 CAF GHC.Conc.Signal 131 1 0.0 0.1 0.0 0.1