| Safe Haskell | None | 
|---|---|
| Language | Haskell2010 | 
Name
Contents
Description
GHC uses several kinds of name internally:
OccName: see OccNameRdrName: see RdrNameNameis the type of names that have had their scoping and binding resolved. They have anOccNamebut also aUniquethat disambiguates Names that have the sameOccNameand indeed is used for allNamecomparison. Names also contain information about where they originated from, see NameId: see IdVar: see Var
- External, if they name things declared in other modules. Some external Names are wired in, i.e. they name primitives defined in the compiler itself
 - Internal, if they name things in the module being compiled. Some internal Names are system names, if they are names manufactured by the compiler
 
Synopsis
- data Name
 - data BuiltInSyntax
 - mkSystemName :: Unique -> OccName -> Name
 - mkSystemNameAt :: Unique -> OccName -> SrcSpan -> Name
 - mkInternalName :: Unique -> OccName -> SrcSpan -> Name
 - mkClonedInternalName :: Unique -> Name -> Name
 - mkDerivedInternalName :: (OccName -> OccName) -> Unique -> Name -> Name
 - mkSystemVarName :: Unique -> FastString -> Name
 - mkSysTvName :: Unique -> FastString -> Name
 - mkFCallName :: Unique -> String -> Name
 - mkExternalName :: Unique -> Module -> OccName -> SrcSpan -> Name
 - mkWiredInName :: Module -> OccName -> Unique -> TyThing -> BuiltInSyntax -> Name
 - nameUnique :: Name -> Unique
 - setNameUnique :: Name -> Unique -> Name
 - nameOccName :: Name -> OccName
 - nameModule :: Name -> Module
 - nameModule_maybe :: Name -> Maybe Module
 - setNameLoc :: Name -> SrcSpan -> Name
 - tidyNameOcc :: Name -> OccName -> Name
 - localiseName :: Name -> Name
 - mkLocalisedOccName :: Module -> (Maybe String -> OccName -> OccName) -> Name -> OccName
 - nameSrcLoc :: Name -> SrcLoc
 - nameSrcSpan :: Name -> SrcSpan
 - pprNameDefnLoc :: Name -> SDoc
 - pprDefinedAt :: Name -> SDoc
 - isSystemName :: Name -> Bool
 - isInternalName :: Name -> Bool
 - isExternalName :: Name -> Bool
 - isTyVarName :: Name -> Bool
 - isTyConName :: Name -> Bool
 - isDataConName :: Name -> Bool
 - isValName :: Name -> Bool
 - isVarName :: Name -> Bool
 - isWiredInName :: Name -> Bool
 - isBuiltInSyntax :: Name -> Bool
 - isHoleName :: Name -> Bool
 - wiredInNameTyThing_maybe :: Name -> Maybe TyThing
 - nameIsLocalOrFrom :: Module -> Name -> Bool
 - nameIsHomePackage :: Module -> Name -> Bool
 - nameIsHomePackageImport :: Module -> Name -> Bool
 - nameIsFromExternalPackage :: UnitId -> Name -> Bool
 - stableNameCmp :: Name -> Name -> Ordering
 - class NamedThing a where
 - getSrcLoc :: NamedThing a => a -> SrcLoc
 - getSrcSpan :: NamedThing a => a -> SrcSpan
 - getOccString :: NamedThing a => a -> String
 - getOccFS :: NamedThing a => a -> FastString
 - pprInfixName :: (Outputable a, NamedThing a) => a -> SDoc
 - pprPrefixName :: NamedThing a => a -> SDoc
 - pprModulePrefix :: PprStyle -> Module -> OccName -> SDoc
 - nameStableString :: Name -> String
 - module OccName
 
The main types
A unique, unambiguous name for something, containing information about where that thing originated.
Instances
| Eq Name # | |
| Data Name # | |
Defined in Name Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Name -> c Name Source # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Name Source # toConstr :: Name -> Constr Source # dataTypeOf :: Name -> DataType Source # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Name) Source # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Name) Source # gmapT :: (forall b. Data b => b -> b) -> Name -> Name Source # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Name -> r Source # gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Name -> r Source # gmapQ :: (forall d. Data d => d -> u) -> Name -> [u] Source # gmapQi :: Int -> (forall d. Data d => d -> u) -> Name -> u Source # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Name -> m Name Source # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Name -> m Name Source # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Name -> m Name Source #  | |
| Ord Name # | |
| NFData Name # | |
| OutputableBndr Name # | |
| Outputable Name # | |
| Uniquable Name # | |
| Binary Name # | Assumes that the   | 
| HasOccName Name # | |
| NamedThing Name # | |
data BuiltInSyntax Source #
BuiltInSyntax is for things like (:), [] and tuples,
 which have special syntactic forms.  They aren't in scope
 as such.
Constructors
| BuiltInSyntax | |
| UserSyntax | 
Creating Names
mkSystemVarName :: Unique -> FastString -> Name Source #
mkSysTvName :: Unique -> FastString -> Name Source #
mkExternalName :: Unique -> Module -> OccName -> SrcSpan -> Name Source #
Create a name which definitely originates in the given module
mkWiredInName :: Module -> OccName -> Unique -> TyThing -> BuiltInSyntax -> Name Source #
Create a name which is actually defined by the compiler itself
Manipulating and deconstructing Names
nameUnique :: Name -> Unique Source #
nameOccName :: Name -> OccName Source #
nameModule :: Name -> Module Source #
localiseName :: Name -> Name Source #
Make the Name into an internal name, regardless of what it was to begin with
mkLocalisedOccName :: Module -> (Maybe String -> OccName -> OccName) -> Name -> OccName Source #
Create a localised variant of a name.
If the name is external, encode the original's module name to disambiguate. SPJ says: this looks like a rather odd-looking function; but it seems to be used only during vectorisation, so I'm not going to worry
nameSrcLoc :: Name -> SrcLoc Source #
nameSrcSpan :: Name -> SrcSpan Source #
pprNameDefnLoc :: Name -> SDoc Source #
pprDefinedAt :: Name -> SDoc Source #
Predicates on Names
isSystemName :: Name -> Bool Source #
isInternalName :: Name -> Bool Source #
isExternalName :: Name -> Bool Source #
isTyVarName :: Name -> Bool Source #
isTyConName :: Name -> Bool Source #
isDataConName :: Name -> Bool Source #
isWiredInName :: Name -> Bool Source #
isBuiltInSyntax :: Name -> Bool Source #
isHoleName :: Name -> Bool Source #
nameIsLocalOrFrom :: Module -> Name -> Bool Source #
Returns True if the name is
   (a) Internal
   (b) External but from the specified module
   (c) External but from the interactive package
The key idea is that False means: the entity is defined in some other module you can find the details (type, fixity, instances) in some interface file those details will be stored in the EPT or HPT
True means: the entity is defined in this module or earlier in the GHCi session you can find details (type, fixity, instances) in the TcGblEnv or TcLclEnv
The isInteractiveModule part is because successive interactions of a GCHi session
 each give rise to a fresh module (Ghci1, Ghci2, etc), but they all come
 from the magic interactive package; and all the details are kept in the
 TcLclEnv, TcGblEnv, NOT in the HPT or EPT.
 See Note [The interactive package] in HscTypes
nameIsFromExternalPackage :: UnitId -> Name -> Bool Source #
Returns True if the Name comes from some other package: neither this pacakge nor the interactive package.
stableNameCmp :: Name -> Name -> Ordering Source #
Compare Names lexicographically This only works for Names that originate in the source code or have been tidied.
Class NamedThing and overloaded friends
class NamedThing a where Source #
A class allowing convenient access to the Name of various datatypes
Minimal complete definition
Instances
| NamedThing Name # | |
| NamedThing TyCon # | |
| NamedThing TyThing # | |
| NamedThing Var # | |
| NamedThing PatSyn # | |
| NamedThing DataCon # | |
| NamedThing ConLike # | |
| NamedThing Class # | |
| NamedThing FamInst # | |
| NamedThing IfaceConDecl # | |
Defined in IfaceSyn  | |
| NamedThing IfaceClassOp # | |
Defined in IfaceSyn  | |
| NamedThing IfaceDecl # | |
| NamedThing ClsInst # | |
| NamedThing (CoAxiom br) # | |
| NamedThing e => NamedThing (GenLocated l e) # | |
Defined in Name  | |
getSrcLoc :: NamedThing a => a -> SrcLoc Source #
getSrcSpan :: NamedThing a => a -> SrcSpan Source #
getOccString :: NamedThing a => a -> String Source #
getOccFS :: NamedThing a => a -> FastString Source #
pprInfixName :: (Outputable a, NamedThing a) => a -> SDoc Source #
pprPrefixName :: NamedThing a => a -> SDoc Source #
nameStableString :: Name -> String Source #
Get a string representation of a Name that's unique and stable
 across recompilations. Used for deterministic generation of binds for
 derived instances.
 eg. "$aeson_70dylHtv1FFGeai1IoxcQr$Data.Aeson.Types.Internal$String"
module OccName