Safe Haskell | Ignore |
---|---|
Language | GHC2021 |
GHC uses several kinds of name internally:
OccName
represents names as strings with just a little more information: the "namespace" that the name came from, e.g. the namespace of value, type constructors or data constructorsRdrName
: see GHC.Types.Name.ReaderName
: see GHC.Types.NameId
: see GHC.Types.IdVar
: see GHC.Types.Var
Synopsis
- data NameSpace
- tcName :: NameSpace
- clsName :: NameSpace
- tcClsName :: NameSpace
- dataName :: NameSpace
- varName :: NameSpace
- fieldName :: FastString -> NameSpace
- tvName :: NameSpace
- srcDataName :: NameSpace
- pprNameSpace :: NameSpace -> SDoc
- pprNonVarNameSpace :: NameSpace -> SDoc
- pprNameSpaceBrief :: NameSpace -> SDoc
- data OccName
- pprOccName :: IsLine doc => OccName -> doc
- occNameMangledFS :: OccName -> FastString
- mkOccName :: NameSpace -> String -> OccName
- mkOccNameFS :: NameSpace -> FastString -> OccName
- mkVarOcc :: String -> OccName
- mkVarOccFS :: FastString -> OccName
- mkRecFieldOcc :: FastString -> String -> OccName
- mkRecFieldOccFS :: FastString -> FastString -> OccName
- mkDataOcc :: String -> OccName
- mkDataOccFS :: FastString -> OccName
- mkTyVarOcc :: String -> OccName
- mkTyVarOccFS :: FastString -> OccName
- mkTcOcc :: String -> OccName
- mkTcOccFS :: FastString -> OccName
- mkClsOcc :: String -> OccName
- mkClsOccFS :: FastString -> OccName
- mkDFunOcc :: String -> Bool -> OccSet -> OccName
- setOccNameSpace :: NameSpace -> OccName -> OccName
- demoteOccName :: OccName -> Maybe OccName
- demoteOccTvName :: OccName -> Maybe OccName
- promoteOccName :: OccName -> Maybe OccName
- varToRecFieldOcc :: HasDebugCallStack => FastString -> OccName -> OccName
- recFieldToVarOcc :: HasDebugCallStack => OccName -> OccName
- class HasOccName name where
- isDerivedOccName :: OccName -> Bool
- mkDataConWrapperOcc :: OccName -> OccName
- mkWorkerOcc :: OccName -> OccName
- mkMatcherOcc :: OccName -> OccName
- mkBuilderOcc :: OccName -> OccName
- mkDefaultMethodOcc :: OccName -> OccName
- isDefaultMethodOcc :: OccName -> Bool
- isTypeableBindOcc :: OccName -> Bool
- mkNewTyCoOcc :: OccName -> OccName
- mkClassOpAuxOcc :: OccName -> OccName
- mkCon2TagOcc :: OccName -> OccName
- mkTag2ConOcc :: OccName -> OccName
- mkMaxTagOcc :: OccName -> OccName
- mkClassDataConOcc :: OccName -> OccName
- mkDictOcc :: OccName -> OccName
- mkIPOcc :: OccName -> OccName
- mkSpecOcc :: OccName -> OccName
- mkForeignExportOcc :: OccName -> OccName
- mkRepEqOcc :: OccName -> OccName
- mkGenR :: OccName -> OccName
- mkGen1R :: OccName -> OccName
- mkDataTOcc :: OccName -> OccName
- mkDataCOcc :: OccName -> OccName
- mkDataConWorkerOcc :: OccName -> OccName
- mkSuperDictSelOcc :: Int -> OccName -> OccName
- mkSuperDictAuxOcc :: Int -> OccName -> OccName
- mkLocalOcc :: Unique -> OccName -> OccName
- mkMethodOcc :: OccName -> OccName
- mkInstTyTcOcc :: String -> OccSet -> OccName
- mkInstTyCoOcc :: OccName -> OccName
- mkEqPredCoOcc :: OccName -> OccName
- mkTyConRepOcc :: OccName -> OccName
- occNameFS :: OccName -> FastString
- occNameString :: OccName -> String
- occNameSpace :: OccName -> NameSpace
- isVarOcc :: OccName -> Bool
- isTvOcc :: OccName -> Bool
- isTcOcc :: OccName -> Bool
- isDataOcc :: OccName -> Bool
- isDataSymOcc :: OccName -> Bool
- isSymOcc :: OccName -> Bool
- isValOcc :: OccName -> Bool
- isFieldOcc :: OccName -> Bool
- fieldOcc_maybe :: OccName -> Maybe FastString
- parenSymOcc :: OccName -> SDoc -> SDoc
- startsWithUnderscore :: OccName -> Bool
- isUnderscore :: OccName -> Bool
- isTcClsNameSpace :: NameSpace -> Bool
- isTvNameSpace :: NameSpace -> Bool
- isDataConNameSpace :: NameSpace -> Bool
- isVarNameSpace :: NameSpace -> Bool
- isValNameSpace :: NameSpace -> Bool
- isFieldNameSpace :: NameSpace -> Bool
- isTermVarOrFieldNameSpace :: NameSpace -> Bool
- data OccEnv a
- emptyOccEnv :: OccEnv a
- unitOccEnv :: OccName -> a -> OccEnv a
- extendOccEnv :: OccEnv a -> OccName -> a -> OccEnv a
- mapOccEnv :: (a -> b) -> OccEnv a -> OccEnv b
- strictMapOccEnv :: (a -> b) -> OccEnv a -> OccEnv b
- mapMaybeOccEnv :: (a -> Maybe b) -> OccEnv a -> OccEnv b
- lookupOccEnv :: OccEnv a -> OccName -> Maybe a
- lookupOccEnv_AllNameSpaces :: OccEnv a -> OccName -> [a]
- lookupOccEnv_WithFields :: OccEnv a -> OccName -> [a]
- lookupFieldsOccEnv :: OccEnv a -> FastString -> [a]
- mkOccEnv :: [(OccName, a)] -> OccEnv a
- mkOccEnv_C :: (a -> a -> a) -> [(OccName, a)] -> OccEnv a
- extendOccEnvList :: OccEnv a -> [(OccName, a)] -> OccEnv a
- elemOccEnv :: OccName -> OccEnv a -> Bool
- nonDetOccEnvElts :: OccEnv a -> [a]
- nonDetFoldOccEnv :: (a -> b -> b) -> b -> OccEnv a -> b
- plusOccEnv :: OccEnv a -> OccEnv a -> OccEnv a
- plusOccEnv_C :: (a -> a -> a) -> OccEnv a -> OccEnv a -> OccEnv a
- extendOccEnv_Acc :: forall a b. (a -> b -> b) -> (a -> b) -> OccEnv b -> OccName -> a -> OccEnv b
- filterOccEnv :: forall a. (a -> Bool) -> OccEnv a -> OccEnv a
- delListFromOccEnv :: OccEnv a -> [OccName] -> OccEnv a
- delFromOccEnv :: forall a. OccEnv a -> OccName -> OccEnv a
- alterOccEnv :: forall a. (Maybe a -> Maybe a) -> OccEnv a -> OccName -> OccEnv a
- minusOccEnv :: OccEnv a -> OccEnv b -> OccEnv a
- minusOccEnv_C :: (a -> b -> Maybe a) -> OccEnv a -> OccEnv b -> OccEnv a
- minusOccEnv_C_Ns :: forall a b. (UniqFM NameSpace a -> UniqFM NameSpace b -> UniqFM NameSpace a) -> OccEnv a -> OccEnv b -> OccEnv a
- pprOccEnv :: (a -> SDoc) -> OccEnv a -> SDoc
- forceOccEnv :: (a -> ()) -> OccEnv a -> ()
- intersectOccEnv_C :: (a -> b -> c) -> OccEnv a -> OccEnv b -> OccEnv c
- data OccSet
- emptyOccSet :: OccSet
- unitOccSet :: OccName -> OccSet
- mkOccSet :: [OccName] -> OccSet
- extendOccSet :: OccSet -> OccName -> OccSet
- extendOccSetList :: OccSet -> [OccName] -> OccSet
- unionOccSets :: OccSet -> OccSet -> OccSet
- unionManyOccSets :: [OccSet] -> OccSet
- elemOccSet :: OccName -> OccSet -> Bool
- isEmptyOccSet :: OccSet -> Bool
- mainOcc :: OccName
- ppMainFn :: OccName -> SDoc
- type TidyOccEnv = UniqFM FastString Int
- emptyTidyOccEnv :: TidyOccEnv
- initTidyOccEnv :: [OccName] -> TidyOccEnv
- tidyOccName :: TidyOccEnv -> OccName -> (TidyOccEnv, OccName)
- avoidClashesOccEnv :: TidyOccEnv -> [OccName] -> TidyOccEnv
- delTidyOccEnvList :: TidyOccEnv -> [FastString] -> TidyOccEnv
- type FastStringEnv a = UniqFM FastString a
- emptyFsEnv :: FastStringEnv a
- lookupFsEnv :: FastStringEnv a -> FastString -> Maybe a
- extendFsEnv :: FastStringEnv a -> FastString -> a -> FastStringEnv a
- mkFsEnv :: [(FastString, a)] -> FastStringEnv a
The NameSpace
type
Construction
fieldName :: FastString -> NameSpace Source #
Pretty Printing
pprNameSpace :: NameSpace -> SDoc Source #
pprNonVarNameSpace :: NameSpace -> SDoc Source #
pprNameSpaceBrief :: NameSpace -> SDoc Source #
The OccName
type
Occurrence Name
In this context that means: "classified (i.e. as a type name, value name, etc) but not qualified and not yet resolved"
Instances
Data OccName Source # | |
Defined in GHC.Types.Name.Occurrence gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> OccName -> c OccName # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c OccName # toConstr :: OccName -> Constr # dataTypeOf :: OccName -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c OccName) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c OccName) # gmapT :: (forall b. Data b => b -> b) -> OccName -> OccName # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> OccName -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> OccName -> r # gmapQ :: (forall d. Data d => d -> u) -> OccName -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> OccName -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> OccName -> m OccName # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> OccName -> m OccName # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> OccName -> m OccName # | |
NFData OccName Source # | |
Defined in GHC.Types.Name.Occurrence | |
HasOccName OccName Source # | |
Binary OccName Source # | |
Outputable OccName Source # | |
OutputableBndr OccName Source # | |
Defined in GHC.Types.Name.Occurrence | |
Eq OccName Source # | |
Ord OccName Source # | |
pprOccName :: IsLine doc => OccName -> doc Source #
occNameMangledFS :: OccName -> FastString Source #
Mangle field names to avoid duplicate symbols.
See Note [Mangling OccNames].
Construction
mkOccNameFS :: NameSpace -> FastString -> OccName Source #
mkVarOccFS :: FastString -> OccName Source #
mkRecFieldOcc :: FastString -> String -> OccName Source #
mkRecFieldOccFS :: FastString -> FastString -> OccName Source #
mkDataOccFS :: FastString -> OccName Source #
mkTyVarOcc :: String -> OccName Source #
mkTyVarOccFS :: FastString -> OccName Source #
mkTcOccFS :: FastString -> OccName Source #
mkClsOccFS :: FastString -> OccName Source #
varToRecFieldOcc :: HasDebugCallStack => FastString -> OccName -> OccName Source #
recFieldToVarOcc :: HasDebugCallStack => OccName -> OccName Source #
class HasOccName name where Source #
Other names in the compiler add additional information to an OccName. This class provides a consistent way to access the underlying OccName.
Instances
HasOccName IfaceClassOp Source # | |
Defined in GHC.Iface.Syntax occName :: IfaceClassOp -> OccName Source # | |
HasOccName IfaceConDecl Source # | |
Defined in GHC.Iface.Syntax occName :: IfaceConDecl -> OccName Source # | |
HasOccName IfaceDecl Source # | |
HasOccName HoleFitCandidate Source # | |
Defined in GHC.Tc.Errors.Hole.FitTypes occName :: HoleFitCandidate -> OccName Source # | |
HasOccName TcBinder Source # | |
HasOccName FieldLabel Source # | |
Defined in GHC.Types.FieldLabel occName :: FieldLabel -> OccName Source # | |
HasOccName Name Source # | |
HasOccName OccName Source # | |
HasOccName RdrName Source # | |
HasOccName Var Source # | |
HasOccName (GlobalRdrEltX info) Source # | |
Defined in GHC.Types.Name.Reader occName :: GlobalRdrEltX info -> OccName Source # | |
(HasOccName (IdP (GhcPass p)), OutputableBndrId p) => HasOccName (IEWrappedName (GhcPass p)) Source # | |
Defined in GHC.Hs.ImpExp |
Derived OccName
s
isDerivedOccName :: OccName -> Bool Source #
Test for definitions internally generated by GHC. This predicate is used to suppress printing of internal definitions in some debug prints
mkDataConWrapperOcc :: OccName -> OccName Source #
mkWorkerOcc :: OccName -> OccName Source #
mkMatcherOcc :: OccName -> OccName Source #
mkBuilderOcc :: OccName -> OccName Source #
mkDefaultMethodOcc :: OccName -> OccName Source #
isDefaultMethodOcc :: OccName -> Bool Source #
isTypeableBindOcc :: OccName -> Bool Source #
Is an OccName
one of a Typeable TyCon
or Module
binding?
This is needed as these bindings are renamed differently.
See Note [Grand plan for Typeable] in GHC.Tc.Instance.Typeable.
mkNewTyCoOcc :: OccName -> OccName Source #
mkClassOpAuxOcc :: OccName -> OccName Source #
mkCon2TagOcc :: OccName -> OccName Source #
mkTag2ConOcc :: OccName -> OccName Source #
mkMaxTagOcc :: OccName -> OccName Source #
mkClassDataConOcc :: OccName -> OccName Source #
mkForeignExportOcc :: OccName -> OccName Source #
mkRepEqOcc :: OccName -> OccName Source #
mkDataTOcc :: OccName -> OccName Source #
mkDataCOcc :: OccName -> OccName Source #
mkDataConWorkerOcc :: OccName -> OccName Source #
mkMethodOcc :: OccName -> OccName Source #
Derive a name for the representation type constructor of a
data
/newtype
instance.
mkInstTyCoOcc :: OccName -> OccName Source #
mkEqPredCoOcc :: OccName -> OccName Source #
mkTyConRepOcc :: OccName -> OccName Source #
Deconstruction
occNameFS :: OccName -> FastString Source #
occNameString :: OccName -> String Source #
occNameSpace :: OccName -> NameSpace Source #
isDataSymOcc :: OccName -> Bool Source #
Test if the OccName
is a data constructor that starts with
a symbol (e.g. :
, or []
)
isSymOcc :: OccName -> Bool Source #
Test if the OccName
is that for any operator (whether
it is a data constructor or variable or whatever)
isValOcc :: OccName -> Bool Source #
Value OccNames
s are those that are either in
the variable, field name or data constructor namespaces
isFieldOcc :: OccName -> Bool Source #
fieldOcc_maybe :: OccName -> Maybe FastString Source #
startsWithUnderscore :: OccName -> Bool Source #
Haskell 98 encourages compilers to suppress warnings about unused
names in a pattern if they start with _
: this implements that test
isUnderscore :: OccName -> Bool Source #
isTcClsNameSpace :: NameSpace -> Bool Source #
isTvNameSpace :: NameSpace -> Bool Source #
isDataConNameSpace :: NameSpace -> Bool Source #
isVarNameSpace :: NameSpace -> Bool Source #
isValNameSpace :: NameSpace -> Bool Source #
isFieldNameSpace :: NameSpace -> Bool Source #
isTermVarOrFieldNameSpace :: NameSpace -> Bool Source #
Is this a term variable or field name namespace?
The OccEnv
type
A map keyed on OccName
. See Note [OccEnv].
Instances
Functor OccEnv Source # | |
NFData a => NFData (OccEnv a) Source # | |
Defined in GHC.Types.Name.Occurrence | |
Outputable a => Outputable (OccEnv a) Source # | |
emptyOccEnv :: OccEnv a Source #
The empty OccEnv
.
lookupOccEnv_AllNameSpaces :: OccEnv a -> OccName -> [a] Source #
lookupOccEnv_WithFields :: OccEnv a -> OccName -> [a] Source #
Lookup an element in an OccEnv
, looking in the record field
namespace for a variable.
lookupFieldsOccEnv :: OccEnv a -> FastString -> [a] Source #
Look up all the record fields that match with the given FastString
in an OccEnv
.
elemOccEnv :: OccName -> OccEnv a -> Bool Source #
Compute whether there is a value keyed by the given OccName
.
nonDetOccEnvElts :: OccEnv a -> [a] Source #
Obtain the elements of an OccEnv
.
The resulting order is non-deterministic.
nonDetFoldOccEnv :: (a -> b -> b) -> b -> OccEnv a -> b Source #
Fold over an OccEnv
. Non-deterministic, unless the folding function
is commutative (i.e. a1
for all f
( a2 f
b ) == a2 f
( a1 f
b )a1
, a2
, b
).
plusOccEnv_C :: (a -> a -> a) -> OccEnv a -> OccEnv a -> OccEnv a Source #
Union of two OccEnv
s with a combining function.
filterOccEnv :: forall a. (a -> Bool) -> OccEnv a -> OccEnv a Source #
Filter out all elements in an OccEnv
using a predicate.
delListFromOccEnv :: OccEnv a -> [OccName] -> OccEnv a Source #
Delete multiple elements from an OccEnv
.
delFromOccEnv :: forall a. OccEnv a -> OccName -> OccEnv a Source #
Delete one element from an OccEnv
.
alterOccEnv :: forall a. (Maybe a -> Maybe a) -> OccEnv a -> OccName -> OccEnv a Source #
Alter an OccEnv
, adding or removing an element at the given key.
minusOccEnv_C :: (a -> b -> Maybe a) -> OccEnv a -> OccEnv b -> OccEnv a Source #
Alters (replaces or removes) those elements of the first OccEnv
that are
mentioned in the second OccEnv
.
Same idea as differenceWith
.
minusOccEnv_C_Ns :: forall a b. (UniqFM NameSpace a -> UniqFM NameSpace b -> UniqFM NameSpace a) -> OccEnv a -> OccEnv b -> OccEnv a Source #
forceOccEnv :: (a -> ()) -> OccEnv a -> () Source #
Force an OccEnv
with the provided function.
The OccSet
type
emptyOccSet :: OccSet Source #
unitOccSet :: OccName -> OccSet Source #
unionManyOccSets :: [OccSet] -> OccSet Source #
isEmptyOccSet :: OccSet -> Bool Source #
Dealing with main
Tidying up
type TidyOccEnv = UniqFM FastString Int Source #
initTidyOccEnv :: [OccName] -> TidyOccEnv Source #
tidyOccName :: TidyOccEnv -> OccName -> (TidyOccEnv, OccName) Source #
avoidClashesOccEnv :: TidyOccEnv -> [OccName] -> TidyOccEnv Source #
delTidyOccEnvList :: TidyOccEnv -> [FastString] -> TidyOccEnv Source #
type FastStringEnv a = UniqFM FastString a Source #
A non-deterministic set of FastStrings. See Note [Deterministic UniqFM] in GHC.Types.Unique.DFM for explanation why it's not deterministic and why it matters. Use DFastStringEnv if the set eventually gets converted into a list or folded over in a way where the order changes the generated code.
emptyFsEnv :: FastStringEnv a Source #
lookupFsEnv :: FastStringEnv a -> FastString -> Maybe a Source #
extendFsEnv :: FastStringEnv a -> FastString -> a -> FastStringEnv a Source #
mkFsEnv :: [(FastString, a)] -> FastStringEnv a Source #