Avoid repeated list elem checks
authorDavid Feuer <david.feuer@gmail.com>
Sun, 12 Feb 2017 00:23:20 +0000 (19:23 -0500)
committerBen Gamari <ben@smart-cactus.org>
Sun, 12 Feb 2017 00:58:34 +0000 (19:58 -0500)
Convert a list to a set before testing membership multiple times.

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3111

compiler/main/SysTools.hs

index 17ce634..b34b1b8 100644 (file)
@@ -79,6 +79,7 @@ import System.Directory
 import Data.Char
 import Data.List
 import qualified Data.Map as Map
+import qualified Data.Set as Set
 
 #ifndef mingw32_HOST_OS
 import qualified System.Posix.Internals
@@ -1068,9 +1069,11 @@ cleanTempFilesExcept dflags dont_delete
    $ mask_
    $ do let ref = filesToClean dflags
         to_delete <- atomicModifyIORef' ref $ \files ->
-            let (to_keep,to_delete) = partition (`elem` dont_delete) files
-            in  (to_keep,to_delete)
+            let res@(_to_keep, _to_delete) =
+                    partition (`Set.member` dont_delete_set) files
+            in  res
         removeTmpFiles dflags to_delete
+  where dont_delete_set = Set.fromList dont_delete
 
 
 -- Return a unique numeric temp file suffix