Hello all,<div>I have massive (parallel if possible) system calls to an external non-deterministic program.</div><div>Each time it is executed, it creates a file depending on a command line option &#39;opt&#39; (input files path, for example).</div>
<div>How can I ensure the file name will be unique? maybe with a global counter?</div><div>My temporary solution have been to use a large random number:</div><div><br></div><div>-----------</div><meta http-equiv="content-type" content="text/html; charset=utf-8"><div>
mysteriousExecution :: String -&gt; IO ()</div><div><meta http-equiv="content-type" content="text/html; charset=utf-8"><div>mysteriousExecution opt = do</div><div>   number &lt;- rand</div><meta http-equiv="content-type" content="text/html; charset=utf-8"><div>
   run $ &quot;mysterious-command &quot; ⊕ opt ⊕ &quot; --create-file=&quot; ⊕ number</div><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta http-equiv="content-type" content="text/html; charset=utf-8"></div>
<div><br></div><div><div>rand = do</div><div>   a ←  getStdRandom (randomR (1,999999999999999999999999999999999)) ∷  IO Int</div><div>   let r = take 20 $ randomRs (&#39;a&#39;,&#39;z&#39;) (mkStdGen a) ∷  String</div><div>
   return r</div></div><div>========</div><div><br></div><div>I&#39;m trying to avoid additional parameters to &#39;mysteriousExecution&#39;.</div><div><div>I tried a counter also (to replace rand), but I don&#39;t know how could I start it inside  &#39;mysteriousExecution&#39;.</div>
<div>c ∷  IO Counter</div><div>c = do</div><div>    r ←  newIORef 0            -- start</div><div>    return (do</div><div>        modifyIORef r (+1)</div><div>        readIORef r)</div></div><div><br></div><div>If somebody says everything is wrong, ok. </div>
<div>I understand. 18 years of imperative programming world can damage the brain.</div><div><br></div><div>Thanks</div>