Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell98 |
Synopsis
- newtype StableName = MkStableName {
- unStableName :: Name
- mkStableName :: Name -> StableName
- availsToStableNameSet :: [AvailInfo] -> HashSet StableName
- data MGIModGuts = MI {
- mgi_binds :: !CoreProgram
- mgi_module :: !Module
- mgi_tcs :: ![TyCon]
- mgi_exports :: !(HashSet StableName)
- mgi_cls_inst :: !(Maybe [ClsInst])
- miModGuts :: Maybe [ClsInst] -> ModGuts -> MGIModGuts
- mgiNamestring :: MGIModGuts -> String
Documentation
newtype StableName Source #
A StableName
is virtually isomorphic to a GHC's Name
but crucially we don't use
the Eq
instance defined on a Name
because it's Unique
-based. In particular, GHC
doesn't guarantee that if we load an interface multiple times we would get the same Unique
for the
same Name
, and this is a problem when we rely on Name
s to be the same when we call isExportedVar
,
which used to use a NameSet
derived from the '[AvailInfo]'. As the name implies, a NameSet
uses a
Name
s Unique
for duplicate detection and indexing, and this would lead to Var
s being resolved to
a Name
which is basically the same, but it has a different Unique
, and that would cause the lookup
inside the NameSet
to fail.
Instances
mkStableName :: Name -> StableName Source #
Creates a new StableName
out of a Name
.
availsToStableNameSet :: [AvailInfo] -> HashSet StableName Source #
Converts a list of AvailInfo
into a "StableNameSet", similarly to what availsToNameSet
would do.
data MGIModGuts Source #
Datatype For Holding GHC ModGuts ------------------------------------------
MI | |
|
mgiNamestring :: MGIModGuts -> String Source #