I agree that string concatenation is the optimal solution and always take the chance to bring out a properly generic solution.<p><pre><code>    let fbg s l u=unlines[case concat[w|(w,c)&lt;-s,mod i c==0]of[]-&gt;show i;m-&gt;m|i&lt;-[l..u]]
    let fizzbuzz = fbg [(&quot;Fizz&quot;,3),(&quot;Buzz&quot;,5)] 1 100
    main = putStrLn fizzbuzz</code></pre>