[Haskell-beginners] optimisation of code
David McBride
toad3k at gmail.com
Fri Sep 21 11:45:46 UTC 2018
My first instinct is to just use anyM instead of allM
allFilesThere :: MonadIO m => [Path Abs File] -> m Bool
allFilesThere fs = liftIO $ anyM (not . doesFileExist . fromAbsFile) fs
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?
On Fri, Sep 21, 2018 at 4:25 AM PICCA Frederic-Emmanuel <
frederic-emmanuel.picca at synchrotron-soleil.fr> wrote:
> Hello,
>
> I would like to have your advice in order to optimize this code.
> The purpose is to trigg an action 'a' if a list of files (thousands)
> exists.
> A process copy files from one directory to another.
>
> allFilesThere :: MonadIO m => [Path Abs File] -> m Bool
> allFilesThere fs = liftIO $ allM (doesFileExist . fromAbsFile) fs
>
> trigOnAllFiles :: MonadIO m => m r -> [Path Abs File] -> m r
> trigOnAllFiles a fs = go
> where
> go = do
> r <- allFilesThere fs
> if r then a else
> ( do liftIO $ threadDelay 1000000
> go)
>
> It works, but it consums a lot's of resources when all the files does not
> exists yet.
> So I would like your advice in order to optimize it :)
>
> thanks for your help.
>
> Frederic
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20180921/4fc93550/attachment-0001.html>
More information about the Beginners
mailing list