| Safe Haskell | None | 
|---|---|
| Language | Haskell2010 | 
Distribution.Types.MungedPackageName
Synopsis
Documentation
data MungedPackageName #
A combination of a package and component name used in various legacy
 interfaces, chiefly bundled with a version as MungedPackageId. It's generally
 better to use a UnitId to opaquely refer to some compilation/packing unit,
 but that doesn't always work, e.g. where a "name" is needed, in which case
 this can be used as a fallback.
Use mkMungedPackageName and unMungedPackageName to convert from/to a String.
Since: Cabal-2.0.0.2
Instances
unMungedPackageName :: MungedPackageName -> String #
Convert MungedPackageName to String
mkMungedPackageName :: String -> MungedPackageName #
Construct a MungedPackageName from a String
mkMungedPackageName is the inverse to unMungedPackageName
Note: No validations are performed to ensure that the resulting
 MungedPackageName is valid
Since: Cabal-2.0.0.2
computeCompatPackageName :: PackageName -> Maybe UnqualComponentName -> MungedPackageName #
Computes the package name for a library. If this is the public library, it will just be the original package name; otherwise, it will be a munged package name recording the original package name as well as the name of the internal library.
A lot of tooling in the Haskell ecosystem assumes that if something
 is installed to the package database with the package name foo,
 then it actually is an entry for the (only public) library in package
 foo.  With internal packages, this is not necessarily true:
 a public library as well as arbitrarily many internal libraries may
 come from the same package.  To prevent tools from getting confused
 in this case, the package name of these internal libraries is munged
 so that they do not conflict the public library proper.  A particular
 case where this matters is ghc-pkg: if we don't munge the package
 name, the inplace registration will OVERRIDE a different internal
 library.
We munge into a reserved namespace, "z-", and encode both the component name and the package name of an internal library using the following format:
compat-pkg-name ::= "z-" package-name "-z-" library-name
where package-name and library-name have "-" ( "z" + ) "-" segments encoded by adding an extra "z".
When we have the public library, the compat-pkg-name is just the package-name, no surprises there!