Because I did not find a good example (at least not on the first result page :D) for the performance difference between boxed and unboxed types in Haskell, I created one.
--boxed.hs foo :: Int -> Int foo 0 = 0 foo n = foo (n - 1) main = print (foo 500000000)
--unboxed.hs import GHC.Exts foo :: Int# -> Int# foo 0# = 0# foo n = foo (n -# 1#) main = print (I# (foo 500000000#))
And here is the quite impressive result:
$ ghc boxed.hs $ ghc -XMagicHash unboxed.hs $ time ./boxed 0 ./boxed 16,34s user 0,03s system 99% cpu 16,397 total $ time ./unboxed 0 ./unboxed 0,85s user 0,00s system 99% cpu 0,865 total