From 00e585281cdc47bb3e981ff2e2282a5ff304a210 Mon Sep 17 00:00:00 2001 From: Mats Rauhala Date: Thu, 4 Nov 2021 10:10:35 +0200 Subject: [PATCH] Avoid unneeded writes --- src/Control/Addressbook/Streaming.hs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/Control/Addressbook/Streaming.hs b/src/Control/Addressbook/Streaming.hs index 1a62e53..2f5ba3b 100644 --- a/src/Control/Addressbook/Streaming.hs +++ b/src/Control/Addressbook/Streaming.hs @@ -29,6 +29,7 @@ import qualified Data.ByteString.Lazy.Char8 as LBC import System.IO.Unsafe (unsafeInterleaveIO) import Control.Parallel.Strategies (rseq, parMap) import qualified Data.List as L +import Control.Monad (unless) combine :: (MonadUnliftIO m, MonadResource m, MonadThrow m, MonadIO m) => ConduitM FilePath Header m () combine = await >>= \case @@ -47,11 +48,12 @@ run = do original <- Set.fromList . map LBS.toStrict . lbsLines <$> LBS.readFile datFile xs <- LBS.getContents >>= stream let set = original `Set.union` F.fold (parMap rseq F.fold (chunks 20 xs)) - runResourceT $ - runConduit $ - CL.sourceList (Set.elems set) - .| C.map (<> "\n") - .| CB.sinkFileCautious datFile + unless (original == set) $ + runResourceT $ + runConduit $ + CL.sourceList (Set.elems set) + .| C.map (<> "\n") + .| CB.sinkFileCautious datFile where separate = \case From x -> [x]