OccName
Contents
Description
- data NameSpace
- tcName, tcClsName, clsName :: NameSpace
- dataName, srcDataName :: NameSpace
- tvName, varName :: 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, mkPADFunOcc, mkPReprTyConOcc, mkPDataDataConOcc, mkPDataTyConOcc, mkVectIsoOcc, mkVectDataConOcc, mkVectTyConOcc, mkVectOcc, mkMaxTagOcc, mkTag2ConOcc, mkCon2TagOcc, mkClassOpAuxOcc, mkEqPredCoOcc, mkInstTyCoOcc, mkNewTyCoOcc, mkDataConWorkerOcc, mkDataCOcc, mkDataTOcc, mkGenRCo, mkGenR, mkGenD, mkGenOcc2, mkGenOcc1, mkForeignExportOcc, mkSpecOcc, mkIPOcc, mkDictOcc, mkClassDataConOcc, mkClassTyConOcc, mkDerivedTyConOcc, mkGenDefMethodOcc, mkDefaultMethodOcc, mkWorkerOcc :: OccName -> OccName
- mkGenC :: OccName -> Int -> OccName
- mkGenS :: OccName -> Int -> Int -> OccName
- mkSuperDictSelOcc :: Int -> OccName -> OccName
- mkLocalOcc :: Unique -> OccName -> OccName
- mkMethodOcc :: OccName -> OccName
- mkInstTyTcOcc :: String -> OccSet -> OccName
- occNameFS :: OccName -> FastString
- occNameString :: OccName -> String
- occNameSpace :: OccName -> NameSpace
- isVarOcc, isDataOcc, isTcOcc, isTvOcc :: 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, isLexSym, isLexId, isLexVar :: FastString -> Bool
- isLexConId, isLexVarSym, isLexVarId, isLexConSym :: FastString -> Bool
- startsVarSym, startsConId, startsConSym, startsVarId :: Char -> Bool
The NameSpace
type
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.
Pretty Printing
pprNameSpace :: NameSpace -> SDoc
pprNonVarNameSpace :: NameSpace -> SDoc
pprNameSpaceBrief :: NameSpace -> SDoc
The OccName
type
data OccName
pprOccName :: OccName -> SDoc
Construction
mkOccNameFS :: NameSpace -> FastString -> OccName
mkVarOccFS :: FastString -> OccName
mkDataOccFS :: FastString -> OccName
mkTyVarOcc :: String -> OccName
mkTyVarOccFS :: FastString -> OccName
mkTcOccFS :: FastString -> OccName
mkClsOccFS :: FastString -> OccName
mkTupleOcc :: NameSpace -> Boxity -> Arity -> OccName
setOccNameSpace :: NameSpace -> OccName -> OccName
Derived OccName
s
isDerivedOccName :: OccName -> Bool
mkDataConWrapperOcc, mkPADFunOcc, mkPReprTyConOcc, mkPDataDataConOcc, mkPDataTyConOcc, mkVectIsoOcc, mkVectDataConOcc, mkVectTyConOcc, mkVectOcc, mkMaxTagOcc, mkTag2ConOcc, mkCon2TagOcc, mkClassOpAuxOcc, mkEqPredCoOcc, mkInstTyCoOcc, mkNewTyCoOcc, mkDataConWorkerOcc, mkDataCOcc, mkDataTOcc, mkGenRCo, mkGenR, mkGenD, mkGenOcc2, mkGenOcc1, mkForeignExportOcc, mkSpecOcc, mkIPOcc, mkDictOcc, mkClassDataConOcc, mkClassTyConOcc, mkDerivedTyConOcc, mkGenDefMethodOcc, mkDefaultMethodOcc, mkWorkerOcc :: OccName -> OccName
mkMethodOcc :: OccName -> OccName
Derive a name for the representation type constructor of a
data
/newtype
instance.
Deconstruction
occNameFS :: OccName -> FastString
occNameString :: OccName -> String
occNameSpace :: OccName -> NameSpace
isDataSymOcc :: OccName -> Bool
Test if the OccName
is a data constructor that starts with
a symbol (e.g. :
, or []
)
Test if the OccName
is that for any operator (whether
it is a data constructor or variable or whatever)
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
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
lookupOccEnv :: OccEnv a -> OccName -> Maybe 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
unitOccSet :: 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
tidyOccName :: TidyOccEnv -> OccName -> (TidyOccEnv, OccName)
initTidyOccEnv :: [OccName] -> TidyOccEnv
Lexical characteristics of Haskell names
isLexConId, isLexVarSym, isLexVarId, isLexConSym :: FastString -> Bool
startsVarSym, startsConId, startsConSym, startsVarId :: Char -> Bool