ghc-7.0.3: The GHC API

OccName

Contents

- The `NameSpace` type
  - Construction
  - Pretty Printing
- The `OccName` type
  - Construction
  - Derived `OccName`s
  - Deconstruction
- The `OccEnv` type
- The `OccSet` type
- Tidying up
- Lexical characteristics of Haskell names

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

Synopsis

- data NameSpace
- 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
- mkTupleOcc :: NameSpace -> Boxity -> Arity -> OccName
- setOccNameSpace :: NameSpace -> OccName -> OccName
- isDerivedOccName :: OccName -> Bool
- mkDataConWrapperOcc :: OccName -> OccName
- mkWorkerOcc :: OccName -> OccName
- mkDefaultMethodOcc :: OccName -> OccName
- mkDerivedTyConOcc :: OccName -> OccName
- mkNewTyCoOcc :: OccName -> OccName
- mkClassOpAuxOcc :: OccName -> OccName
- mkCon2TagOcc :: OccName -> OccName
- mkTag2ConOcc :: OccName -> OccName
- mkMaxTagOcc :: OccName -> OccName
- mkClassTyConOcc :: OccName -> OccName
- mkClassDataConOcc :: OccName -> OccName
- mkDictOcc :: OccName -> OccName
- mkIPOcc :: OccName -> OccName
- mkSpecOcc :: OccName -> OccName
- mkForeignExportOcc :: OccName -> OccName
- mkGenOcc1 :: OccName -> OccName
- mkGenOcc2 :: OccName -> OccName
- mkDataTOcc :: OccName -> OccName
- mkDataCOcc :: OccName -> OccName
- mkDataConWorkerOcc :: OccName -> OccName
- mkSuperDictSelOcc :: Int -> OccName -> OccName
- mkLocalOcc :: Unique -> OccName -> OccName
- mkMethodOcc :: OccName -> OccName
- mkInstTyTcOcc :: String -> OccSet -> OccName
- mkInstTyCoOcc :: OccName -> OccName
- mkEqPredCoOcc :: OccName -> OccName
- mkVectOcc :: OccName -> OccName
- mkVectTyConOcc :: OccName -> OccName
- mkVectDataConOcc :: OccName -> OccName
- mkVectIsoOcc :: OccName -> OccName
- mkPDataTyConOcc :: OccName -> OccName
- mkPDataDataConOcc :: OccName -> OccName
- mkPReprTyConOcc :: OccName -> OccName
- mkPADFunOcc :: 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
- isTupleOcc_maybe :: OccName -> Maybe (NameSpace, Boxity, Arity)
- 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
- 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
- type TidyOccEnv = OccEnv Int
- emptyTidyOccEnv :: TidyOccEnv
- tidyOccName :: TidyOccEnv -> OccName -> (TidyOccEnv, OccName)
- initTidyOccEnv :: [OccName] -> TidyOccEnv
- isLexCon :: FastString -> Bool
- isLexVar :: FastString -> Bool
- isLexId :: FastString -> Bool
- isLexSym :: FastString -> Bool
- isLexConId :: FastString -> Bool
- isLexConSym :: FastString -> Bool
- isLexVarId :: FastString -> Bool
- isLexVarSym :: FastString -> Bool
- startsVarSym :: Char -> Bool
- startsVarId :: Char -> Bool
- startsConSym :: Char -> Bool
- startsConId :: Char -> Bool

# The `NameSpace` type

data NameSpace

Instances

Eq NameSpace |
Ord NameSpace |
Binary NameSpace |

## Construction

There are two forms of data constructor:

Source data constructors
  The data constructors mentioned in Haskell source code
Real data constructors
  The data constructors of the representation type, which may not be the same as the source type

For example:

     data T = T !(Int, Int)

The source datacon has type `(Int, Int) -> T` The real datacon has type `Int -> Int -> T`

GHC chooses a representation based on the strictness etc.

tcName :: NameSpace

clsName :: NameSpace

tcClsName :: NameSpace

dataName :: NameSpace

varName :: NameSpace

tvName :: NameSpace

srcDataName :: NameSpace

## Pretty Printing

pprNameSpace :: NameSpace -> SDoc

pprNonVarNameSpace :: NameSpace -> SDoc

pprNameSpaceBrief :: NameSpace -> SDoc

# The `OccName` type

data OccName

Instances

Eq OccName |
Data OccName |
Ord OccName |
Typeable OccName |
Outputable OccName |
Uniquable OccName |
Binary OccName |

pprOccName :: OccName -> SDoc

## Construction

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

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`

mkTupleOcc :: NameSpace -> Boxity -> Arity -> OccName

setOccNameSpace :: NameSpace -> OccName -> OccName

## Derived `OccName`s

isDerivedOccName :: OccName -> Bool

mkDataConWrapperOcc :: OccName -> OccName

mkWorkerOcc :: OccName -> OccName

mkDefaultMethodOcc :: OccName -> OccName

mkDerivedTyConOcc :: OccName -> OccName

mkNewTyCoOcc :: OccName -> OccName

mkClassOpAuxOcc :: OccName -> OccName

mkCon2TagOcc :: OccName -> OccName

mkTag2ConOcc :: OccName -> OccName

mkMaxTagOcc :: OccName -> OccName

mkClassTyConOcc :: OccName -> OccName

mkClassDataConOcc :: OccName -> OccName

mkDictOcc :: OccName -> OccName

mkIPOcc :: OccName -> OccName

mkSpecOcc :: OccName -> OccName

mkForeignExportOcc :: OccName -> OccName

mkGenOcc1 :: OccName -> OccName

mkGenOcc2 :: OccName -> OccName

mkDataTOcc :: OccName -> OccName

mkDataCOcc :: OccName -> OccName

mkDataConWorkerOcc :: OccName -> OccName

mkSuperDictSelOcc

Arguments

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

mkLocalOcc

Arguments

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

mkMethodOcc :: OccName -> OccName

mkInstTyTcOcc

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

mkEqPredCoOcc :: OccName -> OccName

mkVectOcc :: OccName -> OccName

mkVectTyConOcc :: OccName -> OccName

mkVectDataConOcc :: OccName -> OccName

mkVectIsoOcc :: OccName -> OccName

mkPDataTyConOcc :: OccName -> OccName

mkPDataDataConOcc :: OccName -> OccName

mkPReprTyConOcc :: OccName -> OccName

mkPADFunOcc :: OccName -> OccName

## Deconstruction

occNameFS :: OccName -> FastString

occNameString :: OccName -> String

occNameSpace :: OccName -> NameSpace

isVarOcc :: OccName -> Bool

isTvOcc :: OccName -> Bool

isTcOcc :: OccName -> Bool

isDataOcc :: OccName -> Bool

isDataSymOcc :: OccName -> Bool

Test if the `OccName` is a data constructor that starts with a symbol (e.g. `:`, or `[]`)

isSymOcc :: OccName -> Bool

Test if the `OccName` is that for any operator (whether it is a data constructor or variable or whatever)

isValOcc :: OccName -> Bool

Value `OccNames`s are those that are either in the variable or data constructor namespaces

parenSymOcc :: OccName -> SDoc -> SDoc

Wrap parens around an operator

startsWithUnderscore :: OccName -> Bool

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

isTcClsNameSpace :: NameSpace -> Bool

isTvNameSpace :: NameSpace -> Bool

isDataConNameSpace :: NameSpace -> Bool

isVarNameSpace :: NameSpace -> Bool

isValNameSpace :: NameSpace -> Bool

isTupleOcc_maybe :: OccName -> Maybe (NameSpace, Boxity, Arity)

# The `OccEnv` type

data OccEnv a

Instances

Outputable a => Outputable (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

# The `OccSet` type

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

# Tidying up

type TidyOccEnv = OccEnv Int

emptyTidyOccEnv :: TidyOccEnv

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

initTidyOccEnv :: [OccName] -> TidyOccEnv

# Lexical characteristics of Haskell names

isLexCon :: FastString -> Bool

isLexVar :: FastString -> Bool

isLexId :: FastString -> Bool

isLexSym :: FastString -> Bool

isLexConId :: FastString -> Bool

isLexConSym :: FastString -> Bool

isLexVarId :: FastString -> Bool

isLexVarSym :: FastString -> Bool

startsVarSym :: Char -> Bool

startsVarId :: Char -> Bool

startsConSym :: Char -> Bool

startsConId :: Char -> Bool