Madoc
wrote:
  <br>
  <div class="gmail_quote"><div bgcolor="#ffffff" text="#000000"><blockquote type="cite"><blockquote type="cite">Given a list of numbers, I want to modify
each of those numbers by adding a
    <br>
random offset. However, each such modified number shall stay within
certain
    <br>
bounds, given by the integers minValue and maxValue. After that, I want
to
    <br>
continue computation with the resulting list of type [Int].
    <br>
  </blockquote>
  <br>
Personally, I&#39;d do something like this, isolate the IO code outside the
algorithm to keep the algorithm pure:
  <br>
  <br>
  <br>
modify&#39; :: Int -&gt; Int -&gt; Int
  <br>
modify&#39; offset a =&nbsp; normalize (a + offset)
  <br>
  <br>
generateInfiniteListOfRandomNumbers :: IO [Int]
  <br>
-- implementation left as an exercise
  <br>
  <br>
main = do
  <br>
&nbsp; randomNumbers &lt;- generateInfiniteListOfRandomNumbers
  <br>
&nbsp; print $ zipWith modify&#39; randomNumbers [0, 200, 400, 600, 800, 1000]
  <br>
</blockquote></div><div bgcolor="#ffffff" text="#000000">
I may be wrong, but <tt>generateInfiniteListOfRandomNumbers </tt>won&#39;t
terminate and I think it has to before the next IO action occurs.&nbsp;
(Laziness is great, but I don&#39;t think you can really do lazy IO like
that.)<br>
<br>
Instead of <tt>map :: (a -&gt; b) -&gt; [a] -&gt; [b]</tt>, I think
you are looking for <tt>mapM :: Monad m =&gt; (a -&gt; m b) -&gt; [a]
-&gt; m [b]</tt>.<br><b>
</b><br><b>
</b>Hope this helps,<br>
Thomas<br>
</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

</blockquote></div><br>