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 'opt' (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 -> IO ()</div><div><meta http-equiv="content-type" content="text/html; charset=utf-8"><div>mysteriousExecution opt = do</div><div> number <- rand</div><meta http-equiv="content-type" content="text/html; charset=utf-8"><div>
run $ "mysterious-command " ⊕ opt ⊕ " --create-file=" ⊕ 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 ('a','z') (mkStdGen a) ∷ String</div><div>
return r</div></div><div>========</div><div><br></div><div>I'm trying to avoid additional parameters to 'mysteriousExecution'.</div><div><div>I tried a counter also (to replace rand), but I don't know how could I start it inside 'mysteriousExecution'.</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>