@@ -11,6 +11,7 @@ import Data.Version as X (Version)
1111import Distribution.Package as X (PackageIdentifier (..),
1212 PackageName (..))
1313import Distribution.Version as X (VersionRange (..))
14+import Distribution.Version (intersectVersionRanges)
1415import Distribution.PackageDescription (GenericPackageDescription)
1516
1617newtype PackageDB = PackageDB (Map PackageName PackageInfo)
@@ -91,3 +92,13 @@ data BuildSettings = BuildSettings
9192 -- Returns a reason for stripping in Left, or Right if the package is
9293 -- allowed.
9394 }
95+
96+-- | A wrapper around a @Map@ providing a better @Monoid@ instance.
97+newtype PackageMap = PackageMap { unPackageMap :: Map PackageName (VersionRange, Maintainer) }
98+
99+instance Monoid PackageMap where
100+ mempty = PackageMap mempty
101+ PackageMap x `mappend` PackageMap y =
102+ PackageMap $ unionWith go x y
103+ where
104+ go (r1, m1) (r2, _) = (intersectVersionRanges r1 r2, m1)