<div dir="ltr"><div>My first instinct is to just use anyM instead of allM</div><div><br></div><div>allFilesThere :: MonadIO m => [Path Abs File] -> m Bool<br>
allFilesThere fs = liftIO $ anyM (not . doesFileExist . fromAbsFile) fs</div><div><br></div><div>However you'll now have the opposite problem.  It will take a lot of resources when all the files are there.  But maybe that is okay for your use case?<br></div></div><br><div class="gmail_quote"><div dir="ltr">On Fri, Sep 21, 2018 at 4:25 AM PICCA Frederic-Emmanuel <<a href="mailto:frederic-emmanuel.picca@synchrotron-soleil.fr">frederic-emmanuel.picca@synchrotron-soleil.fr</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello,<br>
<br>
I would like to have your advice in order to optimize this code.<br>
The purpose is to trigg an action 'a' if a list of files (thousands) exists.<br>
A process copy files from one directory to another.<br>
<br>
allFilesThere :: MonadIO m => [Path Abs File] -> m Bool<br>
allFilesThere fs = liftIO $ allM (doesFileExist . fromAbsFile) fs<br>
<br>
trigOnAllFiles :: MonadIO m => m r -> [Path Abs File] -> m r<br>
trigOnAllFiles a fs = go<br>
    where<br>
      go = do<br>
        r <- allFilesThere fs<br>
        if r then a else<br>
            ( do liftIO $ threadDelay 1000000<br>
                 go)<br>
<br>
It works, but it consums a lot's of resources when all the files does not exists yet.<br>
So I would like your advice in order to optimize it :)<br>
<br>
thanks for your help.<br>
<br>
Frederic<br>
_______________________________________________<br>
Beginners mailing list<br>
<a href="mailto:Beginners@haskell.org" target="_blank">Beginners@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners</a><br>
</blockquote></div>