@@ -32,7 +32,7 @@ module Stack.Package
32
32
,autogenDir )
33
33
where
34
34
35
- import Control.Arrow (second , (***) )
35
+ import Control.Arrow ((***) )
36
36
import Control.Exception hiding (try ,catch )
37
37
import Control.Monad
38
38
import Control.Monad.Catch
@@ -150,7 +150,7 @@ resolvePackage packageConfig gpkg = Package
150
150
distDir <- distDirFromDir (parent cabalfp)
151
151
(_,files) <- runReaderT (packageDescModulesAndFiles pkg)
152
152
(cabalfp, buildDir distDir)
153
- return $ S. fromList ( cabalfp : files)
153
+ return $ S. insert cabalfp files
154
154
155
155
, packageModules = GetPackageModules $ \ cabalfp -> do
156
156
distDir <- distDirFromDir (parent cabalfp)
@@ -322,7 +322,7 @@ allBuildInfo' pkg_descr = [ bi | Just lib <- [library pkg_descr]
322
322
-- | Get all files referenced by the package.
323
323
packageDescModulesAndFiles
324
324
:: (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 ) )
326
326
packageDescModulesAndFiles pkg = do
327
327
libfiles <-
328
328
liftM concat2 (mapM libraryFiles (maybe [] return (library pkg)))
@@ -339,26 +339,23 @@ packageDescModulesAndFiles pkg = do
339
339
-- don't error out if not present
340
340
docfiles <- liftM (mempty , ) (resolveGlobFiles (extraDocFiles pkg))
341
341
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])
352
350
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
356
353
357
354
-- | Resolve globbing of files (e.g. data files) to absolute paths.
358
355
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 ))
360
357
resolveGlobFiles =
361
- liftM (catMaybes . concat ) .
358
+ liftM (S. fromList . catMaybes . concat ) .
362
359
mapM resolve
363
360
where
364
361
resolve name =
@@ -418,7 +415,7 @@ matchDirFileGlob_ dir filepath = case parseFileGlob filepath of
418
415
419
416
-- | Get all files referenced by the benchmark.
420
417
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 ) )
422
419
benchmarkFiles bench = do
423
420
dirs <- mapMaybeM resolveDirOrWarn (hsSourceDirs build)
424
421
dir <- asks (parent . fst )
@@ -428,7 +425,7 @@ benchmarkFiles bench = do
428
425
names
429
426
haskellModuleExts
430
427
cfiles <- buildCSources build
431
- return (rmodules,rfiles ++ cfiles)
428
+ return (rmodules,rfiles <> cfiles)
432
429
where
433
430
names =
434
431
concat [bnames,exposed]
@@ -443,7 +440,7 @@ benchmarkFiles bench = do
443
440
444
441
-- | Get all files referenced by the test.
445
442
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 ) )
447
444
testFiles test = do
448
445
dirs <- mapMaybeM resolveDirOrWarn (hsSourceDirs build)
449
446
dir <- asks (parent . fst )
@@ -453,7 +450,7 @@ testFiles test = do
453
450
names
454
451
haskellModuleExts
455
452
cfiles <- buildCSources build
456
- return (modules,rfiles ++ cfiles)
453
+ return (modules,rfiles <> cfiles)
457
454
where
458
455
names =
459
456
concat [bnames,exposed]
@@ -470,7 +467,7 @@ testFiles test = do
470
467
471
468
-- | Get all files referenced by the executable.
472
469
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 ) )
474
471
executableFiles exe =
475
472
do dirs <- mapMaybeM resolveDirOrWarn (hsSourceDirs build)
476
473
dir <- asks (parent . fst )
@@ -480,7 +477,7 @@ executableFiles exe =
480
477
names
481
478
haskellModuleExts
482
479
cfiles <- buildCSources build
483
- return (modules,rfiles ++ cfiles)
480
+ return (modules,rfiles <> cfiles)
484
481
where
485
482
names =
486
483
concat [bnames,exposed]
@@ -490,7 +487,7 @@ executableFiles exe =
490
487
491
488
-- | Get all files referenced by the library.
492
489
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 ) )
494
491
libraryFiles lib =
495
492
do dirs <- mapMaybeM resolveDirOrWarn (hsSourceDirs build)
496
493
dir <- asks (parent . fst )
@@ -500,7 +497,7 @@ libraryFiles lib =
500
497
names
501
498
haskellModuleExts
502
499
cfiles <- buildCSources build
503
- return (modules,rfiles ++ cfiles)
500
+ return (modules,rfiles <> cfiles)
504
501
where
505
502
names =
506
503
concat [bnames,exposed]
@@ -510,8 +507,9 @@ libraryFiles lib =
510
507
511
508
-- | Get all C sources in a build.
512
509
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))
515
513
516
514
-- | Get all dependencies of a package, including library,
517
515
-- executables, tests, benchmarks.
@@ -639,7 +637,7 @@ resolveFilesAndDeps
639
637
-> [Path Abs Dir ] -- ^ Directories to look in.
640
638
-> [Either ModuleName String ] -- ^ Base names.
641
639
-> [Text ] -- ^ Extentions.
642
- -> m (Set ModuleName ,[ Path Abs File ] )
640
+ -> m (Set ModuleName ,Set ( Path Abs File ) )
643
641
resolveFilesAndDeps component dirs names0 exts = do
644
642
(moduleFiles,thFiles,foundModules) <- loop names0 S. empty
645
643
cabalfp <- asks fst
@@ -659,7 +657,7 @@ resolveFilesAndDeps component dirs names0 exts = do
659
657
Just c -> " for '" ++ c ++ " '" ) ++
660
658
" component (add to other-modules):\n " ++
661
659
intercalate " \n " (map display (S. toList unlistedModules))
662
- return (foundModules,S. toList moduleFiles ++ thFiles)
660
+ return (foundModules,moduleFiles <> S. fromList thFiles)
663
661
where
664
662
loop [] doneModules = return (S. empty, [] , doneModules)
665
663
loop names doneModules0 = do
0 commit comments