GHC.Types.Name

ghc-9.2.0.20210821: The GHC API

Safe Haskell | Safe-Inferred
Language | Haskell2010

GHC.Types.Name

Contents

- The main types
  - Creating `Name`s
  - Manipulating and deconstructing `Name`s
  - Predicates on `Name`s
- Class `NamedThing` and overloaded friends

Description

GHC uses several kinds of name internally:

- `OccName`: see GHC.Types.Name.Occurrence
- `RdrName`: see GHC.Types.Name.Reader
- `Name` is the type of names that have had their scoping and binding resolved. They have an `OccName` but also a `Unique` that disambiguates Names that have the same `OccName` and indeed is used for all `Name` comparison. Names also contain information about where they originated from, see GHC.Types.Name
- `Id`: see GHC.Types.Id
- `Var`: see GHC.Types.Var

Names are one of:

- 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
  - = BuiltInSyntax
  - | UserSyntax
- 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
- nameNameSpace :: Name -> NameSpace
- nameModule :: HasDebugCallStack => Name -> Module
- nameModule_maybe :: Name -> Maybe Module
- setNameLoc :: Name -> SrcSpan -> Name
- tidyNameOcc :: Name -> OccName -> Name
- localiseName :: Name -> Name
- 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
- isDynLinkName :: Platform -> Module -> Name -> Bool
- isWiredInName :: Name -> Bool
- isWiredIn :: NamedThing thing => thing -> 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 :: HomeUnit -> Name -> Bool
- stableNameCmp :: Name -> Name -> Ordering
- class NamedThing a where
  - getOccName :: a -> OccName
  - getName :: a -> Name
- 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
- pprNameUnqualified :: Name -> SDoc
- nameStableString :: Name -> String
- module GHC.Types.Name.Occurrence

# The main types

data Name Source #

A unique, unambiguous name for something, containing information about where that thing originated.

#### Instances

Instances details

Data Name Source # |
Instance details Defined in GHC.Types.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 :: forall r r'. (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 #
NFData Name Source # |
Instance details Defined in GHC.Types.Name Methods rnf :: Name -> () Source #
NamedThing Name Source # |
Instance details Defined in GHC.Types.Name Methods getOccName :: Name -> OccName Source # getName :: Name -> Name Source #
HasOccName Name Source # |
Instance details Defined in GHC.Types.Name Methods occName :: Name -> OccName Source #
Uniquable Name Source # |
Instance details Defined in GHC.Types.Name Methods getUnique :: Name -> Unique Source #
Binary Name Source # | Assumes that the `Name` is a non-binding one. See `putIfaceTopBndr` and `getIfaceTopBndr` for serializing binding `Name`s. See `UserData` for the rationale for this distinction.
Instance details Defined in GHC.Types.Name Methods put_ :: BinHandle -> Name -> IO () Source # put :: BinHandle -> Name -> IO (Bin Name) Source # get :: BinHandle -> IO Name Source #
Outputable Name Source # |
Instance details Defined in GHC.Types.Name Methods ppr :: Name -> SDoc Source #
OutputableBndr Name Source # |
Instance details Defined in GHC.Types.Name Methods pprBndr :: BindingSite -> Name -> SDoc Source # pprPrefixOcc :: Name -> SDoc Source # pprInfixOcc :: Name -> SDoc Source # bndrIsJoin_maybe :: Name -> Maybe Int Source #
Eq Name Source # | The same comments as for `Name`'s `Ord` instance apply.
Instance details Defined in GHC.Types.Name Methods (==) :: Name -> Name -> Bool # (/=) :: Name -> Name -> Bool #
Ord Name Source # | Caution: This instance is implemented via `nonDetCmpUnique`, which means that the ordering is not stable across deserialization or rebuilds. See `nonDetCmpUnique` for further information, and trac #15240 for a bug caused by improper use of this instance.
Instance details Defined in GHC.Types.Name Methods compare :: Name -> Name -> Ordering # (<) :: Name -> Name -> Bool # (<=) :: Name -> Name -> Bool # (>) :: Name -> Name -> Bool # (>=) :: Name -> Name -> Bool # max :: Name -> Name -> Name # min :: Name -> Name -> Name #
type Anno Name Source # |
Instance details Defined in GHC.Hs.Extension type Anno Name = SrcSpanAnnN
type Anno (LocatedN Name) Source # |
Instance details Defined in GHC.Hs.Binds type Anno (LocatedN Name) = SrcSpan
type Anno [LocatedN Name] Source # |
Instance details Defined in GHC.Hs.Binds type Anno [LocatedN Name] = SrcSpan

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 `Name`s

mkSystemName :: Unique -> OccName -> Name Source #

Create a name brought into being by the compiler

mkSystemNameAt :: Unique -> OccName -> SrcSpan -> Name Source #

mkInternalName :: Unique -> OccName -> SrcSpan -> Name Source #

Create a name which is (for now at least) local to the current module and hence does not need a `Module` to disambiguate it from other `Name`s

mkClonedInternalName :: Unique -> Name -> Name Source #

mkDerivedInternalName :: (OccName -> OccName) -> Unique -> Name -> Name Source #

mkSystemVarName :: Unique -> FastString -> Name Source #

mkSysTvName :: Unique -> FastString -> Name Source #

mkFCallName :: Unique -> String -> Name Source #

Make a name for a foreign call

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 `Name`s

nameUnique :: Name -> Unique Source #

setNameUnique :: Name -> Unique -> Name Source #

nameOccName :: Name -> OccName Source #

nameNameSpace :: Name -> NameSpace Source #

nameModule :: HasDebugCallStack => Name -> Module Source #

nameModule_maybe :: Name -> Maybe Module Source #

setNameLoc :: Name -> SrcSpan -> Name Source #

tidyNameOcc :: Name -> OccName -> Name Source #

localiseName :: Name -> Name Source #

Make the `Name` into an internal name, regardless of what it was to begin with

nameSrcLoc :: Name -> SrcLoc Source #

nameSrcSpan :: Name -> SrcSpan Source #

pprNameDefnLoc :: Name -> SDoc Source #

pprDefinedAt :: Name -> SDoc Source #

## Predicates on `Name`s

isSystemName :: Name -> Bool Source #

isInternalName :: Name -> Bool Source #

isExternalName :: Name -> Bool Source #

isTyVarName :: Name -> Bool Source #

isTyConName :: Name -> Bool Source #

isDataConName :: Name -> Bool Source #

isValName :: Name -> Bool Source #

isVarName :: Name -> Bool Source #

isDynLinkName :: Platform -> Module -> Name -> Bool Source #

Will the `Name` come from a dynamically linked package?

isWiredInName :: Name -> Bool Source #

isWiredIn :: NamedThing thing => thing -> Bool Source #

isBuiltInSyntax :: Name -> Bool Source #

isHoleName :: Name -> Bool Source #

wiredInNameTyThing_maybe :: Name -> Maybe TyThing 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 GHCi 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 GHC.Runtime.Context

nameIsHomePackage :: Module -> Name -> Bool Source #

nameIsHomePackageImport :: Module -> Name -> Bool Source #

nameIsFromExternalPackage :: HomeUnit -> Name -> Bool Source #

Returns True if the Name comes from some other package: neither this package 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

getName

Methods

getOccName :: a -> OccName Source #

getName :: a -> Name Source #

#### Instances

Instances details

NamedThing Class Source # |
Instance details Defined in GHC.Core.Class Methods getOccName :: Class -> OccName Source # getName :: Class -> Name Source #
NamedThing ConLike Source # |
Instance details Defined in GHC.Core.ConLike Methods getOccName :: ConLike -> OccName Source # getName :: ConLike -> Name Source #
NamedThing DataCon Source # |
Instance details Defined in GHC.Core.DataCon Methods getOccName :: DataCon -> OccName Source # getName :: DataCon -> Name Source #
NamedThing FamInst Source # |
Instance details Defined in GHC.Core.FamInstEnv Methods getOccName :: FamInst -> OccName Source # getName :: FamInst -> Name Source #
NamedThing ClsInst Source # |
Instance details Defined in GHC.Core.InstEnv Methods getOccName :: ClsInst -> OccName Source # getName :: ClsInst -> Name Source #
NamedThing PatSyn Source # |
Instance details Defined in GHC.Core.PatSyn Methods getOccName :: PatSyn -> OccName Source # getName :: PatSyn -> Name Source #
NamedThing TyCon Source # |
Instance details Defined in GHC.Core.TyCon Methods getOccName :: TyCon -> OccName Source # getName :: TyCon -> Name Source #
NamedThing IfaceClassOp Source # |
Instance details Defined in GHC.Iface.Syntax Methods getOccName :: IfaceClassOp -> OccName Source # getName :: IfaceClassOp -> Name Source #
NamedThing IfaceConDecl Source # |
Instance details Defined in GHC.Iface.Syntax Methods getOccName :: IfaceConDecl -> OccName Source # getName :: IfaceConDecl -> Name Source #
NamedThing IfaceDecl Source # |
Instance details Defined in GHC.Iface.Syntax Methods getOccName :: IfaceDecl -> OccName Source # getName :: IfaceDecl -> Name Source #
NamedThing HoleFitCandidate Source # |
Instance details Defined in GHC.Tc.Errors.Hole.FitTypes Methods getOccName :: HoleFitCandidate -> OccName Source # getName :: HoleFitCandidate -> Name Source #
NamedThing Name Source # |
Instance details Defined in GHC.Types.Name Methods getOccName :: Name -> OccName Source # getName :: Name -> Name Source #
NamedThing TyThing Source # |
Instance details Defined in GHC.Types.TyThing Methods getOccName :: TyThing -> OccName Source # getName :: TyThing -> Name Source #
NamedThing Var Source # |
Instance details Defined in GHC.Types.Var Methods getOccName :: Var -> OccName Source # getName :: Var -> Name Source #
NamedThing (CoAxiom br) Source # |
Instance details Defined in GHC.Core.Coercion.Axiom Methods getOccName :: CoAxiom br -> OccName Source # getName :: CoAxiom br -> Name Source #
NamedThing e => NamedThing (Located e) Source # |
Instance details Defined in GHC.Types.Name Methods getOccName :: Located e -> OccName Source # getName :: Located e -> Name Source #
NamedThing (Located a) => NamedThing (LocatedAn an a) Source # |
Instance details Defined in GHC.Parser.Annotation Methods getOccName :: LocatedAn an a -> OccName Source # getName :: LocatedAn an a -> Name Source #
NamedThing tv => NamedThing (VarBndr tv flag) Source # |
Instance details Defined in GHC.Types.Var Methods getOccName :: VarBndr tv flag -> OccName Source # getName :: VarBndr tv flag -> Name Source #
NamedThing (HsTyVarBndr flag GhcRn) Source # |
Instance details Defined in GHC.Hs.Type Methods getOccName :: HsTyVarBndr flag GhcRn -> OccName Source # getName :: HsTyVarBndr flag GhcRn -> Name Source #

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 #

pprModulePrefix :: PprStyle -> Module -> OccName -> SDoc Source #

pprNameUnqualified :: Name -> SDoc Source #

Print the string of Name unqualifiedly directly.

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 GHC.Types.Name.Occurrence