-- 1 original $ ghc -fforce-recomp -O2 --make 0.hs && /usr/bin/time ./0 +RTS -K100m -H100m && /usr/bin/time ./0 +RTS -K100m -H200m && /usr/bin/time ./0 +RTS -K100m -H400m 14.66user 0.32system 0:15.08elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 13.71user 0.39system 0:14.30elapsed 98%CPU (0avgtext+0avgdata 0maxresident)k 12.99user 0.54system 0:13.92elapsed 97%CPU (0avgtext+0avgdata 0maxresident)k -- 2 strict accumulator $ ghc -fforce-recomp -O2 --make 1.hs && /usr/bin/time ./1 +RTS -H100m && /usr/bin/time ./1 +RTS -H200m && /usr/bin/time ./1 +RTS -H400m 11.98user 0.14system 0:12.30elapsed 98%CPU (0avgtext+0avgdata 0maxresident)k 10.96user 0.35system 0:11.73elapsed 96%CPU (0avgtext+0avgdata 0maxresident)k 11.37user 0.49system 0:12.21elapsed 97%CPU (0avgtext+0avgdata 0maxresident)k -- 3 refactor to do IO in IO $ ghc -fforce-recomp -O2 --make 2.hs && /usr/bin/time ./2 +RTS -H100m && /usr/bin/time ./2 +RTS -H200m && /usr/bin/time ./2 +RTS -H400m 11.93user 0.17system 0:12.33elapsed 98%CPU (0avgtext+0avgdata 0maxresident)k 11.46user 0.34system 0:12.00elapsed 98%CPU (0avgtext+0avgdata 0maxresident)k 11.23user 0.45system 0:11.86elapsed 98%CPU (0avgtext+0avgdata 0maxresident)k -- 4a) pass StdGen around $ ghc -fforce-recomp -O2 --make 3.hs && /usr/bin/time ./3 +RTS -H100m && /usr/bin/time ./3 +RTS -H200m && /usr/bin/time ./3 +RTS -H400m 10.38user 0.23system 0:10.64elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 10.34user 0.32system 0:10.69elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 9.94user 0.36system 0:10.33elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k -- 4b) use System.Random.Mersenne $ ghc -fforce-recomp -O2 --make 4.hs && /usr/bin/time ./4 +RTS -H100m && /usr/bin/time ./4 +RTS -H200m && /usr/bin/time ./4 +RTS -H400m 5.09user 0.05system 0:05.17elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 4.74user 0.22system 0:05.00elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 3.90user 0.38system 0:04.34elapsed 98%CPU (0avgtext+0avgdata 0maxresident)k -- 5) both 4a) and 4b) $ ghc -fforce-recomp -O2 --make 5.hs && /usr/bin/time ./5 +RTS -H100m && /usr/bin/time ./5 +RTS -H200m && /usr/bin/time ./5 +RTS -H400m 2.59user 0.13system 0:02.74elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 1.50user 0.10system 0:01.60elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k 1.51user 0.08system 0:01.63elapsed 97%CPU (0avgtext+0avgdata 0maxresident)k -- 6) unsafeRead and unsafeWrite $ ghc -fforce-recomp -O2 --make 6.hs && /usr/bin/time ./6 +RTS -H100m && /usr/bin/time ./6 +RTS -H200m && /usr/bin/time ./6 +RTS -H400m 2.61user 0.11system 0:02.75elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 1.50user 0.10system 0:01.63elapsed 98%CPU (0avgtext+0avgdata 0maxresident)k 1.54user 0.06system 0:01.62elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k -- 7) dons' version $ ghc -fforce-recomp -O2 --make 7.hs && /usr/bin/time ./7 +RTS -H100m && /usr/bin/time ./7 +RTS -H200m && /usr/bin/time ./7 +RTS -H400m 1.34user 0.09system 0:01.45elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 1.37user 0.08system 0:01.47elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 1.36user 0.09system 0:01.47elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k -- 8) 6) plus making L field strict $ ghc -fforce-recomp -O2 --make 8.hs && /usr/bin/time ./8 +RTS -H100m && /usr/bin/time ./8 +RTS -H200m && /usr/bin/time ./8 +RTS -H400m 2.45user 0.09system 0:02.58elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 1.49user 0.09system 0:01.61elapsed 98%CPU (0avgtext+0avgdata 0maxresident)k 1.47user 0.09system 0:01.60elapsed 98%CPU (0avgtext+0avgdata 0maxresident)k $ ghc -funbox-strict-fields -fforce-recomp -O2 --make 8.hs && /usr/bin/time ./8 +RTS -H100m && /usr/bin/time ./8 +RTS -H200m && /usr/bin/time ./8 +RTS -H400m 1.44user 0.06system 0:01.52elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 1.44user 0.08system 0:01.54elapsed 98%CPU (0avgtext+0avgdata 0maxresident)k 1.47user 0.06system 0:01.54elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k