http://projecteuler.net/ by Haskell