@@ -11,9 +11,7 @@ module File.Header
12import Control.Monad.Except (liftIO)
12import Control.Monad.Except (liftIO)
13import qualified Data.ByteString as BS
13import qualified Data.ByteString as BS
14−import Data.List.NonEmpty (NonEmpty((:|)))
15import qualified Data.Map as Map
14import qualified Data.Map as Map
16−import Data.Semigroup ((<>))
17import qualified Data.Time.Calendar as Day
15import qualified Data.Time.Calendar as Day
18import qualified Data.Time.Clock as Time
16import qualified Data.Time.Clock as Time
19import qualified System.Directory as Dir
17import qualified System.Directory as Dir
@@ -100,10 +98,12 @@ readManyFiles summary file files =
100 Task.mapError Exit.Crawl $
98 Task.mapError Exit.Crawl $
101 do info <- readManyFilesHelp summary file
99 do info <- readManyFilesHelp summary file
102 infos <- traverse (readManyFilesHelp summary) files
100 infos <- traverse (readManyFilesHelp summary) files
103− let insert (name, info) dict = Map.insertWith (<>) name (info :| []) dict
104 let nameTable = foldr insert Map.empty (info:infos)
101 let nameTable = foldr insert Map.empty (info:infos)
105 _ <- Map.traverseWithKey detectDuplicateNames nameTable
102 _ <- Map.traverseWithKey detectDuplicateNames nameTable
106 return (info, infos)
103 return (info, infos)
105+ append (x,xs) (y,ys) = (x, xs ++ y : ys)
106+ insert (k,v) dict = Map.insertWith append k (v, []) dict
109readManyFilesHelp :: Summary -> FilePath -> Task.Task_ E.Exit (Module.Raw, Info)
109readManyFilesHelp :: Summary -> FilePath -> Task.Task_ E.Exit (Module.Raw, Info)
@@ -118,8 +118,8 @@ readManyFilesHelp summary path =
118 return (name, info)
118 return (name, info)
121−detectDuplicateNames :: Module.Raw -> NonEmpty Info -> Task.Task_ E.Exit ()
121+detectDuplicateNames :: Module.Raw -> (Info, [Info]) -> Task.Task_ E.Exit ()
122−detectDuplicateNames name (info :| otherInfos) =
122+detectDuplicateNames name (info, otherInfos) =
123 case otherInfos of
123 case otherInfos of
125 return ()
125 return ()