mod package:Cabal-syntax

integer modulus, satisfying
(x `div` y)*y + (x `mod` y) == x
WARNING: This function is partial (because it throws when 0 is passed as the divisor) for all the integer types in base.
Retrieve the relative symbolic path to a Haskell module.
Data type for Haskell module names.
A valid Haskell module name.
A module identity uniquely identifies a Haskell module by qualifying a ModuleName with the UnitId which defined it. This type distinguishes between two packages which provide a module with the same name, or a module from the same package compiled with different dependencies. There are a few cases where Cabal needs to know about module identities, e.g., when writing out reexported modules in the InstalledPackageInfo.
Renaming applied to the modules provided by a package. The boolean indicates whether or not to also include all of the original names of modules. Thus, ModuleRenaming False [] is "don't expose any modules, and ModuleRenaming True [(Data.Bool, Bool)] is, "expose all modules, but also expose Data.Bool as Bool". If a renaming is omitted you get the DefaultRenaming. (NB: This is a list not a map so that we can preserve order.)
A module renaming/thinning; e.g., (A as B, C as C) brings B and C into scope.
Unlike a Module, an OpenModule is either an ordinary module from some unit, OR an OpenModuleVar, representing a hole that needs to be filled in. Substitutions are over module variables.
An explicit substitution on modules. NB: These substitutions are NOT idempotent, for example, a valid substitution is (A -> B, B -> A).
Pretty-print the entries of a module substitution, suitable for embedding into a OpenUnitId or passing to GHC via --instantiate-with.
Pretty-print a single entry of a module substitution.
Take a module substitution and hash it into a string suitable for UnitId. Note that since this takes Module, not OpenModule, you are responsible for recursively converting OpenModule into Module. See also Distribution.Backpack.ReadyComponent.