[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