-- If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.
-- Find the sum of all the multiples of 3 or 5 below 1000.

main = do
  -- fold the range 1 to 999 filtered on when the 3-modulus and 5-modulus
  -- of the predicate multiply to zero from left to right accumulated.
  let sum = foldl1 (\acc x -> acc + x) [x | x <- [1..999], x`mod`3 * x`mod`5 == 0]

  print sum
