> Current code re-checks file existence always in same order, so worst case is - N files and only last of them does not exists.
> In that case this code will re-check (N-1) files during each consecutive retry.
> This can be optimized by moving already existing files to the end of file list(or dropping them from list completely, if files are only > > added but never removed).
> For this you could re-write `allFilesThere` something like:
> allFilesThere fs = liftIO $ do
> existing, non_existing <- partitionM (doesFileExist . fromAbsFile) fs
< return (non_existing++ existing, null non_existing)
> Then allFilesThere could start next iteration by checking previously non-existing files and probably failing much faster.