Skip to content

Commit 3c0a9d2

Browse files
committed
Re-apply Sets in Stack.Package (#32, #105)
1 parent 79f7b55 commit 3c0a9d2

File tree

1 file changed

+28
-30
lines changed

1 file changed

+28
-30
lines changed

src/Stack/Package.hs

Lines changed: 28 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ module Stack.Package
3232
,autogenDir)
3333
where
3434

35-
import Control.Arrow (second,(***))
35+
import Control.Arrow ((***))
3636
import Control.Exception hiding (try,catch)
3737
import Control.Monad
3838
import Control.Monad.Catch
@@ -150,7 +150,7 @@ resolvePackage packageConfig gpkg = Package
150150
distDir <- distDirFromDir (parent cabalfp)
151151
(_,files) <- runReaderT (packageDescModulesAndFiles pkg)
152152
(cabalfp, buildDir distDir)
153-
return $ S.fromList (cabalfp : files)
153+
return $ S.insert cabalfp files
154154

155155
, packageModules = GetPackageModules $ \cabalfp -> do
156156
distDir <- distDirFromDir (parent cabalfp)
@@ -322,7 +322,7 @@ allBuildInfo' pkg_descr = [ bi | Just lib <- [library pkg_descr]
322322
-- | Get all files referenced by the package.
323323
packageDescModulesAndFiles
324324
:: (MonadLogger m, MonadIO m, MonadThrow m, MonadReader (Path Abs File, Path Abs Dir) m, MonadCatch m)
325-
=> PackageDescription -> m (Set ModuleName,[Path Abs File])
325+
=> PackageDescription -> m (Set ModuleName,Set (Path Abs File))
326326
packageDescModulesAndFiles pkg = do
327327
libfiles <-
328328
liftM concat2 (mapM libraryFiles (maybe [] return (library pkg)))
@@ -339,26 +339,23 @@ packageDescModulesAndFiles pkg = do
339339
-- don't error out if not present
340340
docfiles <- liftM (mempty, ) (resolveGlobFiles (extraDocFiles pkg))
341341
return
342-
(second
343-
nubOrd
344-
(concat2
345-
[ libfiles
346-
, exefiles
347-
, dfiles
348-
, srcfiles
349-
, docfiles
350-
, benchfiles
351-
, testfiles]))
342+
(concat2
343+
[ libfiles
344+
, exefiles
345+
, dfiles
346+
, srcfiles
347+
, docfiles
348+
, benchfiles
349+
, testfiles])
352350
where
353-
concat2 :: Ord a => [(Set a, [b])] -> (Set a, [b])
354-
concat2 = (mconcat *** concat) . unzip
355-
351+
concat2 :: (Ord a,Ord b) => [(Set a, Set b)] -> (Set a, Set b)
352+
concat2 = (mconcat *** mconcat) . unzip
356353

357354
-- | Resolve globbing of files (e.g. data files) to absolute paths.
358355
resolveGlobFiles :: (MonadLogger m,MonadIO m,MonadThrow m,MonadReader (Path Abs File, Path Abs Dir) m,MonadCatch m)
359-
=> [String] -> m [Path Abs File]
356+
=> [String] -> m (Set (Path Abs File))
360357
resolveGlobFiles =
361-
liftM (catMaybes . concat) .
358+
liftM (S.fromList . catMaybes . concat) .
362359
mapM resolve
363360
where
364361
resolve name =
@@ -418,7 +415,7 @@ matchDirFileGlob_ dir filepath = case parseFileGlob filepath of
418415

419416
-- | Get all files referenced by the benchmark.
420417
benchmarkFiles :: (MonadLogger m, MonadIO m, MonadThrow m, MonadReader (Path Abs File, Path Abs Dir) m)
421-
=> Benchmark -> m (Set ModuleName,[Path Abs File])
418+
=> Benchmark -> m (Set ModuleName,Set (Path Abs File))
422419
benchmarkFiles bench = do
423420
dirs <- mapMaybeM resolveDirOrWarn (hsSourceDirs build)
424421
dir <- asks (parent . fst)
@@ -428,7 +425,7 @@ benchmarkFiles bench = do
428425
names
429426
haskellModuleExts
430427
cfiles <- buildCSources build
431-
return (rmodules,rfiles ++ cfiles)
428+
return (rmodules,rfiles <> cfiles)
432429
where
433430
names =
434431
concat [bnames,exposed]
@@ -443,7 +440,7 @@ benchmarkFiles bench = do
443440

444441
-- | Get all files referenced by the test.
445442
testFiles :: (MonadLogger m, MonadIO m, MonadThrow m, MonadReader (Path Abs File, Path Abs Dir) m)
446-
=> TestSuite -> m (Set ModuleName,[Path Abs File])
443+
=> TestSuite -> m (Set ModuleName,Set (Path Abs File))
447444
testFiles test = do
448445
dirs <- mapMaybeM resolveDirOrWarn (hsSourceDirs build)
449446
dir <- asks (parent . fst)
@@ -453,7 +450,7 @@ testFiles test = do
453450
names
454451
haskellModuleExts
455452
cfiles <- buildCSources build
456-
return (modules,rfiles ++ cfiles)
453+
return (modules,rfiles <> cfiles)
457454
where
458455
names =
459456
concat [bnames,exposed]
@@ -470,7 +467,7 @@ testFiles test = do
470467

471468
-- | Get all files referenced by the executable.
472469
executableFiles :: (MonadLogger m,MonadIO m,MonadThrow m,MonadReader (Path Abs File, Path Abs Dir) m)
473-
=> Executable -> m (Set ModuleName,[Path Abs File])
470+
=> Executable -> m (Set ModuleName,Set (Path Abs File))
474471
executableFiles exe =
475472
do dirs <- mapMaybeM resolveDirOrWarn (hsSourceDirs build)
476473
dir <- asks (parent . fst)
@@ -480,7 +477,7 @@ executableFiles exe =
480477
names
481478
haskellModuleExts
482479
cfiles <- buildCSources build
483-
return (modules,rfiles ++ cfiles)
480+
return (modules,rfiles <> cfiles)
484481
where
485482
names =
486483
concat [bnames,exposed]
@@ -490,7 +487,7 @@ executableFiles exe =
490487

491488
-- | Get all files referenced by the library.
492489
libraryFiles :: (MonadLogger m,MonadIO m,MonadThrow m,MonadReader (Path Abs File, Path Abs Dir) m)
493-
=> Library -> m (Set ModuleName,[Path Abs File])
490+
=> Library -> m (Set ModuleName,Set (Path Abs File))
494491
libraryFiles lib =
495492
do dirs <- mapMaybeM resolveDirOrWarn (hsSourceDirs build)
496493
dir <- asks (parent . fst)
@@ -500,7 +497,7 @@ libraryFiles lib =
500497
names
501498
haskellModuleExts
502499
cfiles <- buildCSources build
503-
return (modules,rfiles ++ cfiles)
500+
return (modules,rfiles <> cfiles)
504501
where
505502
names =
506503
concat [bnames,exposed]
@@ -510,8 +507,9 @@ libraryFiles lib =
510507

511508
-- | Get all C sources in a build.
512509
buildCSources :: (MonadLogger m,MonadIO m,MonadThrow m,MonadReader (Path Abs File, Path Abs Dir) m)
513-
=> BuildInfo -> m [Path Abs File]
514-
buildCSources build = mapMaybeM resolveFileOrWarn (cSources build)
510+
=> BuildInfo -> m (Set (Path Abs File))
511+
buildCSources build =
512+
liftM S.fromList (mapMaybeM resolveFileOrWarn (cSources build))
515513

516514
-- | Get all dependencies of a package, including library,
517515
-- executables, tests, benchmarks.
@@ -639,7 +637,7 @@ resolveFilesAndDeps
639637
-> [Path Abs Dir] -- ^ Directories to look in.
640638
-> [Either ModuleName String] -- ^ Base names.
641639
-> [Text] -- ^ Extentions.
642-
-> m (Set ModuleName,[Path Abs File])
640+
-> m (Set ModuleName,Set (Path Abs File))
643641
resolveFilesAndDeps component dirs names0 exts = do
644642
(moduleFiles,thFiles,foundModules) <- loop names0 S.empty
645643
cabalfp <- asks fst
@@ -659,7 +657,7 @@ resolveFilesAndDeps component dirs names0 exts = do
659657
Just c -> " for '" ++ c ++ "'") ++
660658
" component (add to other-modules):\n " ++
661659
intercalate "\n " (map display (S.toList unlistedModules))
662-
return (foundModules,S.toList moduleFiles ++ thFiles)
660+
return (foundModules,moduleFiles <> S.fromList thFiles)
663661
where
664662
loop [] doneModules = return (S.empty, [], doneModules)
665663
loop names doneModules0 = do

0 commit comments

Comments
 (0)