OccName

ghc-8.0.0.20160204: The GHC API

Safe Haskell | None
Language | Haskell2010

OccName

Contents

- The `NameSpace` type
  - Construction
  - Pretty Printing
- The `OccName` type
  - Construction
  - Derived `OccName`s
  - Deconstruction
- The `OccEnv` type
- The `OccSet` type
- Tidying up

Description

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 constructors
- `RdrName`: see RdrName
- `Name`: see Name
- `Id`: see Id
- `Var`: see Var

Synopsis

- data NameSpace
- nameSpacesRelated :: NameSpace -> NameSpace -> Bool
- tcName :: NameSpace
- clsName :: NameSpace
- tcClsName :: NameSpace
- dataName :: NameSpace
- varName :: NameSpace
- tvName :: NameSpace
- srcDataName :: NameSpace
- pprNameSpace :: NameSpace -> SDoc
- pprNonVarNameSpace :: NameSpace -> SDoc
- pprNameSpaceBrief :: NameSpace -> SDoc
- data OccName
- pprOccName :: OccName -> SDoc
- mkOccName :: NameSpace -> String -> OccName
- mkOccNameFS :: NameSpace -> FastString -> OccName
- mkVarOcc :: String -> OccName
- mkVarOccFS :: 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
- class HasOccName name where
- isDerivedOccName :: OccName -> Bool
- mkDataConWrapperOcc :: OccName -> OccName
- mkWorkerOcc :: OccName -> OccName
- mkMatcherOcc :: OccName -> OccName
- mkBuilderOcc :: OccName -> OccName
- mkDefaultMethodOcc :: OccName -> OccName
- 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
- mkGenD :: Module -> OccName -> OccName
- mkGenR :: OccName -> OccName
- mkGen1R :: OccName -> OccName
- mkGenRCo :: OccName -> OccName
- mkGenC :: Module -> OccName -> Int -> OccName
- mkGenS :: Module -> OccName -> Int -> Int -> 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
- mkVectOcc :: Maybe String -> OccName -> OccName
- mkVectTyConOcc :: Maybe String -> OccName -> OccName
- mkVectDataConOcc :: Maybe String -> OccName -> OccName
- mkVectIsoOcc :: Maybe String -> OccName -> OccName
- mkPDataTyConOcc :: Maybe String -> OccName -> OccName
- mkPDataDataConOcc :: Maybe String -> OccName -> OccName
- mkPDatasTyConOcc :: Maybe String -> OccName -> OccName
- mkPDatasDataConOcc :: Maybe String -> OccName -> OccName
- mkPReprTyConOcc :: Maybe String -> OccName -> OccName
- mkPADFunOcc :: Maybe String -> OccName -> OccName
- mkRecFldSelOcc :: String -> 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
- parenSymOcc :: OccName -> SDoc -> SDoc
- startsWithUnderscore :: OccName -> Bool
- isTcClsNameSpace :: NameSpace -> Bool
- isTvNameSpace :: NameSpace -> Bool
- isDataConNameSpace :: NameSpace -> Bool
- isVarNameSpace :: NameSpace -> Bool
- isValNameSpace :: 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
- lookupOccEnv :: OccEnv a -> OccName -> Maybe 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
- occEnvElts :: OccEnv a -> [a]
- foldOccEnv :: (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_C :: (a -> a -> a) -> OccEnv a -> OccName -> a -> OccEnv a
- extendOccEnv_Acc :: (a -> b -> b) -> (a -> b) -> OccEnv b -> OccName -> a -> OccEnv b
- filterOccEnv :: (elt -> Bool) -> OccEnv elt -> OccEnv elt
- delListFromOccEnv :: OccEnv a -> [OccName] -> OccEnv a
- delFromOccEnv :: OccEnv a -> OccName -> OccEnv a
- alterOccEnv :: (Maybe elt -> Maybe elt) -> OccEnv elt -> OccName -> OccEnv elt
- pprOccEnv :: (a -> SDoc) -> OccEnv a -> SDoc
- type OccSet = UniqSet OccName
- emptyOccSet :: OccSet
- unitOccSet :: OccName -> OccSet
- mkOccSet :: [OccName] -> OccSet
- extendOccSet :: OccSet -> OccName -> OccSet
- extendOccSetList :: OccSet -> [OccName] -> OccSet
- unionOccSets :: OccSet -> OccSet -> OccSet
- unionManyOccSets :: [OccSet] -> OccSet
- minusOccSet :: OccSet -> OccSet -> OccSet
- elemOccSet :: OccName -> OccSet -> Bool
- occSetElts :: OccSet -> [OccName]
- foldOccSet :: (OccName -> b -> b) -> b -> OccSet -> b
- isEmptyOccSet :: OccSet -> Bool
- intersectOccSet :: OccSet -> OccSet -> OccSet
- intersectsOccSet :: OccSet -> OccSet -> Bool
- filterOccSet :: (OccName -> Bool) -> OccSet -> OccSet
- type TidyOccEnv = UniqFM Int
- emptyTidyOccEnv :: TidyOccEnv
- tidyOccName :: TidyOccEnv -> OccName -> (TidyOccEnv, OccName)
- initTidyOccEnv :: [OccName] -> TidyOccEnv
- type FastStringEnv a = UniqFM 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

data NameSpace Source

Instances

Eq NameSpace |
Methods (==) :: NameSpace -> NameSpace -> Bool (/=) :: NameSpace -> NameSpace -> Bool
Ord NameSpace |
Methods compare :: NameSpace -> NameSpace -> Ordering (<) :: NameSpace -> NameSpace -> Bool (<=) :: NameSpace -> NameSpace -> Bool (>) :: NameSpace -> NameSpace -> Bool (>=) :: NameSpace -> NameSpace -> Bool max :: NameSpace -> NameSpace -> NameSpace min :: NameSpace -> NameSpace -> NameSpace
Binary NameSpace |
Methods put_ :: BinHandle -> NameSpace -> IO () Source put :: BinHandle -> NameSpace -> IO (Bin NameSpace) Source get :: BinHandle -> IO NameSpace Source

nameSpacesRelated :: NameSpace -> NameSpace -> Bool Source

## Construction

tcName :: NameSpace Source

clsName :: NameSpace Source

tcClsName :: NameSpace Source

dataName :: NameSpace Source

varName :: NameSpace Source

tvName :: NameSpace Source

srcDataName :: NameSpace Source

## Pretty Printing

pprNameSpace :: NameSpace -> SDoc Source

pprNonVarNameSpace :: NameSpace -> SDoc Source

pprNameSpaceBrief :: NameSpace -> SDoc Source

# The `OccName` type

data OccName Source

Instances

Eq OccName |
Methods (==) :: OccName -> OccName -> Bool (/=) :: OccName -> OccName -> Bool
Data OccName |
Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> OccName -> c OccName Source gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c OccName Source toConstr :: OccName -> Constr Source dataTypeOf :: OccName -> DataType Source dataCast1 :: Typeable (TYPE Lifted -> TYPE Lifted) t => (forall d. Data d => c (t d)) -> Maybe (c OccName) Source dataCast2 :: Typeable (TYPE Lifted -> TYPE Lifted -> TYPE Lifted) t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c OccName) Source gmapT :: (forall b. Data b => b -> b) -> OccName -> OccName Source gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> OccName -> r Source gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> OccName -> r Source gmapQ :: (forall d. Data d => d -> u) -> OccName -> [u] Source gmapQi :: Int -> (forall d. Data d => d -> u) -> OccName -> u Source gmapM :: Monad m => (forall d. Data d => d -> m d) -> OccName -> m OccName Source gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> OccName -> m OccName Source gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> OccName -> m OccName Source
Ord OccName |
Methods compare :: OccName -> OccName -> Ordering (<) :: OccName -> OccName -> Bool (<=) :: OccName -> OccName -> Bool (>) :: OccName -> OccName -> Bool (>=) :: OccName -> OccName -> Bool max :: OccName -> OccName -> OccName min :: OccName -> OccName -> OccName
OutputableBndr OccName |
Methods pprBndr :: BindingSite -> OccName -> SDoc Source pprPrefixOcc :: OccName -> SDoc Source pprInfixOcc :: OccName -> SDoc Source
Outputable OccName |
Methods ppr :: OccName -> SDoc Source pprPrec :: Rational -> OccName -> SDoc Source
Uniquable OccName |
Methods getUnique :: OccName -> Unique Source
Binary OccName |
Methods put_ :: BinHandle -> OccName -> IO () Source put :: BinHandle -> OccName -> IO (Bin OccName) Source get :: BinHandle -> IO OccName Source
HasOccName OccName |
Methods occName :: OccName -> OccName Source

pprOccName :: OccName -> SDoc Source

## Construction

mkOccName :: NameSpace -> String -> OccName Source

mkOccNameFS :: NameSpace -> FastString -> OccName Source

mkVarOcc :: String -> OccName Source

mkVarOccFS :: FastString -> OccName Source

mkDataOcc :: String -> OccName Source

mkDataOccFS :: FastString -> OccName Source

mkTyVarOcc :: String -> OccName Source

mkTyVarOccFS :: FastString -> OccName Source

mkTcOcc :: String -> OccName Source

mkTcOccFS :: FastString -> OccName Source

mkClsOcc :: String -> OccName Source

mkClsOccFS :: FastString -> OccName Source

mkDFunOcc Source

Arguments

:: String | Typically the class and type glommed together e.g. `OrdMaybe`. Only used in debug mode, for extra clarity
-> Bool | Is this a hs-boot instance DFun?
-> OccSet | avoid these Occs
-> OccName | E.g. `$f3OrdMaybe`

setOccNameSpace :: NameSpace -> OccName -> OccName Source

demoteOccName :: OccName -> Maybe 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.

Minimal complete definition

occName

Methods

occName :: name -> OccName Source

Instances

HasOccName OccName |
Methods occName :: OccName -> OccName Source
HasOccName Name |
Methods occName :: Name -> OccName Source
HasOccName RdrName |
Methods occName :: RdrName -> OccName Source
HasOccName IfaceConDecl |
Methods occName :: IfaceConDecl -> OccName Source
HasOccName IfaceClassOp |
Methods occName :: IfaceClassOp -> OccName Source
HasOccName IfaceDecl |
Methods occName :: IfaceDecl -> OccName Source

## Derived `OccName`s

isDerivedOccName :: OccName -> Bool Source

Test for definitions internally generated by GHC. This predicte 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

mkNewTyCoOcc :: OccName -> OccName Source

mkClassOpAuxOcc :: OccName -> OccName Source

mkCon2TagOcc :: OccName -> OccName Source

mkTag2ConOcc :: OccName -> OccName Source

mkMaxTagOcc :: OccName -> OccName Source

mkClassDataConOcc :: OccName -> OccName Source

mkDictOcc :: OccName -> OccName Source

mkIPOcc :: OccName -> OccName Source

mkSpecOcc :: OccName -> OccName Source

mkForeignExportOcc :: OccName -> OccName Source

mkRepEqOcc :: OccName -> OccName Source

mkGenD :: Module -> OccName -> OccName Source

mkGenR :: OccName -> OccName Source

mkGen1R :: OccName -> OccName Source

mkGenRCo :: OccName -> OccName Source

mkGenC :: Module -> OccName -> Int -> OccName Source

mkGenS :: Module -> OccName -> Int -> Int -> OccName Source

mkDataTOcc :: OccName -> OccName Source

mkDataCOcc :: OccName -> OccName Source

mkDataConWorkerOcc :: OccName -> OccName Source

mkSuperDictSelOcc Source

Arguments

:: Int | Index of superclass, e.g. 3
-> OccName | Class, e.g. `Ord`
-> OccName | Derived `Occname`, e.g. `$p3Ord`

mkSuperDictAuxOcc :: Int -> OccName -> OccName Source

mkLocalOcc Source

Arguments

:: Unique | Unique to combine with the `OccName`
-> OccName | Local name, e.g. `sat`
-> OccName | Nice unique version, e.g. `$L23sat`

mkMethodOcc :: OccName -> OccName Source

mkInstTyTcOcc Source

Arguments

:: String | Family name, e.g. `Map`
-> OccSet | avoid these Occs
-> OccName |
    R:Map

Derive a name for the representation type constructor of a `data`/`newtype` instance.

mkInstTyCoOcc :: OccName -> OccName Source

mkEqPredCoOcc :: OccName -> OccName Source

mkVectOcc :: Maybe String -> OccName -> OccName Source

mkVectTyConOcc :: Maybe String -> OccName -> OccName Source

mkVectDataConOcc :: Maybe String -> OccName -> OccName Source

mkVectIsoOcc :: Maybe String -> OccName -> OccName Source

mkPDataTyConOcc :: Maybe String -> OccName -> OccName Source

mkPDataDataConOcc :: Maybe String -> OccName -> OccName Source

mkPDatasTyConOcc :: Maybe String -> OccName -> OccName Source

mkPDatasDataConOcc :: Maybe String -> OccName -> OccName Source

mkPReprTyConOcc :: Maybe String -> OccName -> OccName Source

mkPADFunOcc :: Maybe String -> OccName -> OccName Source

mkRecFldSelOcc :: String -> OccName Source

mkTyConRepOcc :: OccName -> OccName Source

## Deconstruction

occNameFS :: OccName -> FastString Source

occNameString :: OccName -> String Source

occNameSpace :: OccName -> NameSpace Source

isVarOcc :: OccName -> Bool Source

isTvOcc :: OccName -> Bool Source

isTcOcc :: OccName -> Bool Source

isDataOcc :: OccName -> Bool 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 or data constructor namespaces

parenSymOcc :: OccName -> SDoc -> SDoc Source

Wrap parens around an operator

startsWithUnderscore :: OccName -> Bool Source

Haskell 98 encourages compilers to suppress warnings about unsed names in a pattern if they start with `_`: this implements that test

isTcClsNameSpace :: NameSpace -> Bool Source

isTvNameSpace :: NameSpace -> Bool Source

isDataConNameSpace :: NameSpace -> Bool Source

isVarNameSpace :: NameSpace -> Bool Source

isValNameSpace :: NameSpace -> Bool Source

# The `OccEnv` type

data OccEnv a Source

Instances

Outputable a => Outputable (OccEnv a) |
Methods ppr :: OccEnv a -> SDoc Source pprPrec :: Rational -> OccEnv a -> SDoc Source

emptyOccEnv :: OccEnv a Source

unitOccEnv :: OccName -> a -> OccEnv a Source

extendOccEnv :: OccEnv a -> OccName -> a -> OccEnv a Source

mapOccEnv :: (a -> b) -> OccEnv a -> OccEnv b Source

lookupOccEnv :: OccEnv a -> OccName -> Maybe a Source

mkOccEnv :: [(OccName, a)] -> OccEnv a Source

mkOccEnv_C :: (a -> a -> a) -> [(OccName, a)] -> OccEnv a Source

extendOccEnvList :: OccEnv a -> [(OccName, a)] -> OccEnv a Source

elemOccEnv :: OccName -> OccEnv a -> Bool Source

occEnvElts :: OccEnv a -> [a] Source

foldOccEnv :: (a -> b -> b) -> b -> OccEnv a -> b Source

plusOccEnv :: OccEnv a -> OccEnv a -> OccEnv a Source

plusOccEnv_C :: (a -> a -> a) -> OccEnv a -> OccEnv a -> OccEnv a Source

extendOccEnv_C :: (a -> a -> a) -> OccEnv a -> OccName -> a -> OccEnv a Source

extendOccEnv_Acc :: (a -> b -> b) -> (a -> b) -> OccEnv b -> OccName -> a -> OccEnv b Source

filterOccEnv :: (elt -> Bool) -> OccEnv elt -> OccEnv elt Source

delListFromOccEnv :: OccEnv a -> [OccName] -> OccEnv a Source

delFromOccEnv :: OccEnv a -> OccName -> OccEnv a Source

alterOccEnv :: (Maybe elt -> Maybe elt) -> OccEnv elt -> OccName -> OccEnv elt Source

pprOccEnv :: (a -> SDoc) -> OccEnv a -> SDoc Source

# The `OccSet` type

type OccSet = UniqSet OccName Source

emptyOccSet :: OccSet Source

unitOccSet :: OccName -> OccSet Source

mkOccSet :: [OccName] -> OccSet Source

extendOccSet :: OccSet -> OccName -> OccSet Source

extendOccSetList :: OccSet -> [OccName] -> OccSet Source

unionOccSets :: OccSet -> OccSet -> OccSet Source

unionManyOccSets :: [OccSet] -> OccSet Source

minusOccSet :: OccSet -> OccSet -> OccSet Source

elemOccSet :: OccName -> OccSet -> Bool Source

occSetElts :: OccSet -> [OccName] Source

foldOccSet :: (OccName -> b -> b) -> b -> OccSet -> b Source

isEmptyOccSet :: OccSet -> Bool Source

intersectOccSet :: OccSet -> OccSet -> OccSet Source

intersectsOccSet :: OccSet -> OccSet -> Bool Source

filterOccSet :: (OccName -> Bool) -> OccSet -> OccSet Source

# Tidying up

type TidyOccEnv = UniqFM Int Source

emptyTidyOccEnv :: TidyOccEnv Source

tidyOccName :: TidyOccEnv -> OccName -> (TidyOccEnv, OccName) Source

initTidyOccEnv :: [OccName] -> TidyOccEnv Source

type FastStringEnv a = UniqFM a Source

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