Project Euler #1 in Haskell Looking for feedback/critiques/alternatives to my solution for the 1st Project Euler question:

{-|
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.
-}

import Data.List

-- Finds all multiples of a factor below set limit, by computing factor*n and adding to a list, until factor*n &gt; limit
f_multiple :: [Int] -&gt; Int -&gt; Int -&gt; Int -&gt; [Int]
f_multiple multiples current limit factor
        | (current * factor) &gt;= limit   = multiples
        | otherwise         = f_multiple (multiples ++ [current * factor]) (current + 1) limit factor

sum_multiples :: Int -&gt; Int -&gt; Int -&gt; Int
sum_multiples max first_factor second_factor = foldr (+) 0 ( (f_multiple [] 0 max first_factor) `union` (f_multiple [] 0 max second_factor))
There are several approaches to Project Euler Question 1.  The one you have chosen is not particularly efficient, as it involves creating two lists, then merging them.  I'm not going to present alternative solutions here.  If you are going with this approach, you can write it much more simply:

sum_multiples :: Int -&gt; Int -&gt; Int -&gt; Int
sum_multiples max factor1 factor2 = sum $ multiples1 `union` multiples2
  where
    multiples1 = [factor1, 2 * factor1 .. max - 1]
    multiples2 = [factor2, 2 * factor2 .. max - 1]


In particular,


foldr (+) 0 is just the built-in sum function.
f_multiple can be replaced with ranges.


In terms of style, your last line is hard to read due to its length.  To shorten it,


Use shorter variable names, e.g. factor1 instead of first_factor.
Give names to complex subexpressions using a where clause.
Use the $ operator to form a "pipeline", instead of nesting parentheses.