Eternal Gratitude for the help, it&#39;s working perfectly, I will consider the exceptions and other stuff now.<div><br></div><div>the code looks like this now</div><div><br></div><div><br></div><div><div>import System.IO</div>

<div>import Control.Concurrent</div><div>import Data.List </div><div>import Control.Monad</div><div><br></div><div>main = do</div><div>          finished &lt;- newEmptyMVar</div><div>          input &lt;- newMVar  [1..30000]</div>

<div>          ia &lt;- newEmptyMVar</div><div>          ib &lt;- newEmptyMVar</div><div>          ic &lt;- newEmptyMVar</div><div><br></div><div>          forkIO $ do x &lt;- readMVar input</div><div>                      putMVar ia x</div>

<div>                      putMVar finished ()</div><div><br></div><div>          forkIO $ do a &lt;- readMVar ia</div><div>                      putMVar ib ( sum a )</div><div>                      putMVar finished ()</div>

<div><br></div><div>          forkIO $ do a &lt;- readMVar ia</div><div>                      putMVar ic ( reverse a )</div><div>                      putMVar finished ()</div><div><br></div><div>          b &lt;- readMVar ib</div>

<div>          c &lt;- readMVar ic</div><div>          writeFile &quot;somaEprod.txt&quot; (show b ++ &quot;\n&quot;) </div><div>          appendFile &quot;somaEprod.txt&quot; (show c)             </div><div>          replicateM_ 3 (takeMVar finished)</div>

<div><br></div><div><br></div><div><br></div><div><br></div><div>Valeu</div><div>Mauricio</div><br><div class="gmail_quote">On Sun, Jul 1, 2012 at 12:24 AM, Felipe Almeida Lessa <span dir="ltr">&lt;<a href="mailto:felipe.lessa@gmail.com" target="_blank">felipe.lessa@gmail.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Your application is exiting before your forkIOs get a chance to<br>
execute.  Instead of<br>
<br>
  forkIO $ do<br>
    ...<br>
  forkIO $ do<br>
    ...<br>
  forkIO $ do<br>
    ...<br>
<br>
use something like<br>
<br>
  finished &lt;- newEmptyMVar<br>
<br>
  forkIO $ do<br>
    ...<br>
    putMVar finished ()<br>
<br>
  forkIO $ do<br>
    ...<br>
    putMVar finished ()<br>
<br>
  forkIO $ do<br>
    ...<br>
    putMVar finished ()<br>
<br>
  replicateM_ 3 (takeMVar finished)<br>
<br>
Doing so will avoid your program to exit until all threads have finished.<br>
<br>
Note that the code above is extremely fragile: doesn&#39;t handle<br>
exceptions, you have to manually specify the number of threads that<br>
you opened, etc.  These are abstracted by some libraries on Hackage<br>
that you may use later for Real World Code (TM).<br>
<br>
Cheers, =)<br>
<span class="HOEnZb"><font color="#888888"><br>
--<br>
Felipe.<br>
</font></span></blockquote></div><br></div>