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