From 135d75f2b9c0f77b837da4243dea32a97d4088a5 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 7 Apr 2011 15:00:06 -0400 Subject: [PATCH] avoid list traverse on queue I wanted to use M.insertWith' (\_ l -> file:l) action [] m , but the order of the parameters and which to ignore is not clear, and seems unsafe to rely on. --- GitQueue.hs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/GitQueue.hs b/GitQueue.hs index 480027fa0c..be0fcfc4af 100644 --- a/GitQueue.hs +++ b/GitQueue.hs @@ -57,7 +57,11 @@ add :: Queue -> String -> [CommandParam] -> FilePath -> Queue add (Queue n m) subcommand params file = Queue (n + 1) m' where action = Action subcommand params - m' = M.insertWith' (++) action [file] m + -- There are probably few items in the map, but there + -- can be a lot of files per item. So, optimise adding + -- files. + m' = M.insertWith' const action files m + files = file:(M.findWithDefault [] action m) {- Number of items in a queue. -} size :: Queue -> Int