On Tue, Dec 16, 2008 at 5:54 AM, Luke Palmer <span dir="ltr">&lt;<a href="mailto:lrpalmer@gmail.com">lrpalmer@gmail.com</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Okay, that&#39;s a bit clearer.&nbsp; Control.Parallel is not what you want; that is for parallelizing pure code (and is very nice inside its little domain).&nbsp; But you want concurrent code: multiple threads that change state at the same time.&nbsp; That is in Control.Concurrent.<br>

<br>In particular, the &quot;shared variable&quot; is Data.IORef.<br><br>Simple example from which you should be able to extrapolate.</blockquote><div><br>Apologies, this code doesn&#39;t compile.&nbsp; Here&#39;s the fixed version:<br>
<br><span style="font-family: courier new,monospace;">import Control.Concurrent</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">import Control.Concurrent.MVar</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">import Data.IORef</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">threadBody var = do</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp; x &lt;- readIORef var</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp; writeIORef var (x+1)</span><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">main = do</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp; var &lt;- newIORef 0</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp; -- spawn two threads</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp; forkIO (threadBody var)</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp; forkIO (threadBody var)</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp; -- look at the value of the variable</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp; x &lt;- readIORef var</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp; print x</span><br><br></div></div><br>