@@ -132,11 +132,11 @@ import qualified Data.Tree as Tree
132
132
-- Packages are uniquely identified in by their 'UnitId', they can
133
133
-- also be efficiently looked up by package name or by name and version.
134
134
--
135
- data PackageIndex a = PackageIndex
135
+ data PackageIndex a = PackageIndex {
136
136
-- The primary index. Each InstalledPackageInfo record is uniquely identified
137
137
-- by its UnitId.
138
138
--
139
- ! (Map UnitId a )
139
+ unitIdIndex :: ! (Map UnitId a ),
140
140
141
141
-- This auxiliary index maps package names (case-sensitively) to all the
142
142
-- versions and instances of that package. This allows us to find all
@@ -149,9 +149,9 @@ data PackageIndex a = PackageIndex
149
149
--
150
150
-- FIXME: Clarify what "preference order" means. Check that this invariant is
151
151
-- preserved. See #1463 for discussion.
152
- ! (Map PackageName (Map Version [a ]))
152
+ packageIdIndex :: ! (Map PackageName (Map Version [a ]))
153
153
154
- deriving (Eq , Generic , Show , Read )
154
+ } deriving (Eq , Generic , Show , Read )
155
155
156
156
instance Binary a => Binary (PackageIndex a )
157
157
@@ -354,26 +354,26 @@ deleteDependency (Dependency name verstionRange) =
354
354
-- | Get all the packages from the index.
355
355
--
356
356
allPackages :: PackageIndex a -> [a ]
357
- allPackages ( PackageIndex pids _) = Map. elems pids
357
+ allPackages = Map. elems . unitIdIndex
358
358
359
359
-- | Get all the packages from the index.
360
360
--
361
361
-- They are grouped by package name (case-sensitively).
362
362
--
363
363
allPackagesByName :: PackageIndex a -> [(PackageName , [a ])]
364
- allPackagesByName ( PackageIndex _ pnames) =
364
+ allPackagesByName index =
365
365
[ (pkgname, concat (Map. elems pvers))
366
- | (pkgname, pvers) <- Map. toList pnames ]
366
+ | (pkgname, pvers) <- Map. toList (packageIdIndex index) ]
367
367
368
368
-- | Get all the packages from the index.
369
369
--
370
370
-- They are grouped by source package id (package name and version).
371
371
--
372
372
allPackagesBySourcePackageId :: HasUnitId a => PackageIndex a
373
373
-> [(PackageId , [a ])]
374
- allPackagesBySourcePackageId ( PackageIndex _ pnames) =
374
+ allPackagesBySourcePackageId index =
375
375
[ (packageId ipkg, ipkgs)
376
- | pvers <- Map. elems pnames
376
+ | pvers <- Map. elems (packageIdIndex index)
377
377
, ipkgs@ (ipkg: _) <- Map. elems pvers ]
378
378
379
379
--
@@ -387,14 +387,14 @@ allPackagesBySourcePackageId (PackageIndex _ pnames) =
387
387
--
388
388
lookupUnitId :: PackageIndex a -> UnitId
389
389
-> Maybe a
390
- lookupUnitId ( PackageIndex m _) uid = Map. lookup uid m
390
+ lookupUnitId index uid = Map. lookup uid (unitIdIndex index)
391
391
392
392
-- | Does a lookup by component identifier. In the absence
393
393
-- of Backpack, this is just a 'lookupUnitId'.
394
394
--
395
395
lookupComponentId :: PackageIndex a -> ComponentId
396
396
-> Maybe a
397
- lookupComponentId ( PackageIndex m _) uid = Map. lookup (SimpleUnitId uid) m
397
+ lookupComponentId index uid = Map. lookup (SimpleUnitId uid) (unitIdIndex index)
398
398
399
399
-- | Backwards compatibility for Cabal pre-1.24.
400
400
{-# DEPRECATED lookupInstalledPackageId "Use lookupUnitId instead" #-}
@@ -410,8 +410,8 @@ lookupInstalledPackageId = lookupUnitId
410
410
-- preference, with the most preferred first.
411
411
--
412
412
lookupSourcePackageId :: PackageIndex a -> PackageId -> [a ]
413
- lookupSourcePackageId ( PackageIndex _ pnames) pkgid =
414
- case Map. lookup (packageName pkgid) pnames of
413
+ lookupSourcePackageId index pkgid =
414
+ case Map. lookup (packageName pkgid) (packageIdIndex index) of
415
415
Nothing -> []
416
416
Just pvers -> case Map. lookup (packageVersion pkgid) pvers of
417
417
Nothing -> []
@@ -429,8 +429,8 @@ lookupPackageId index pkgid = case lookupSourcePackageId index pkgid of
429
429
--
430
430
lookupPackageName :: PackageIndex a -> PackageName
431
431
-> [(Version , [a ])]
432
- lookupPackageName ( PackageIndex _ pnames) name =
433
- case Map. lookup name pnames of
432
+ lookupPackageName index name =
433
+ case Map. lookup name (packageIdIndex index) of
434
434
Nothing -> []
435
435
Just pvers -> Map. toList pvers
436
436
@@ -442,8 +442,8 @@ lookupPackageName (PackageIndex _ pnames) name =
442
442
--
443
443
lookupDependency :: PackageIndex a -> Dependency
444
444
-> [(Version , [a ])]
445
- lookupDependency ( PackageIndex _ pnames) (Dependency name versionRange) =
446
- case Map. lookup name pnames of
445
+ lookupDependency index (Dependency name versionRange) =
446
+ case Map. lookup name (packageIdIndex index) of
447
447
Nothing -> []
448
448
Just pvers -> [ entry
449
449
| entry@ (ver, _) <- Map. toList pvers
@@ -466,8 +466,8 @@ lookupDependency (PackageIndex _ pnames) (Dependency name versionRange) =
466
466
-- it is a non-empty list of non-empty lists.
467
467
--
468
468
searchByName :: PackageIndex a -> String -> SearchResult [a ]
469
- searchByName ( PackageIndex _ pnames) name =
470
- case [ pkgs | pkgs@ (PackageName name',_) <- Map. toList pnames
469
+ searchByName index name =
470
+ case [ pkgs | pkgs@ (PackageName name',_) <- Map. toList (packageIdIndex index)
471
471
, lowercase name' == lname ] of
472
472
[] -> None
473
473
[(_,pvers)] -> Unambiguous (concat (Map. elems pvers))
@@ -483,9 +483,9 @@ data SearchResult a = None | Unambiguous a | Ambiguous [a]
483
483
-- That is, all packages that contain the given string in their name.
484
484
--
485
485
searchByNameSubstring :: PackageIndex a -> String -> [a ]
486
- searchByNameSubstring ( PackageIndex _ pnames) searchterm =
486
+ searchByNameSubstring index searchterm =
487
487
[ pkg
488
- | (PackageName name, pvers) <- Map. toList pnames
488
+ | (PackageName name, pvers) <- Map. toList (packageIdIndex index)
489
489
, lsearchterm `isInfixOf` lowercase name
490
490
, pkgs <- Map. elems pvers
491
491
, pkg <- pkgs ]
0 commit comments