GHC.Types.Name.Occurrence

ghc-9.10.0.20240426: The GHC API

Safe Haskell | None
Language | GHC2021

GHC.Types.Name.Occurrence

Contents

- The `NameSpace` type
  - Construction
  - Pretty Printing
- The `OccName` type
  - Construction
  - Derived `OccName`s
  - Deconstruction
- The `OccEnv` type
- The `OccSet` type
- Dealing with main
- 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 GHC.Types.Name.Reader
- `Name`: see GHC.Types.Name
- `Id`: see GHC.Types.Id
- `Var`: 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
  - occName :: name -> OccName
- 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 :: (a -> b -> b) -> (a -> b) -> OccEnv b -> OccName -> a -> OccEnv b
- filterOccEnv :: (a -> Bool) -> OccEnv a -> OccEnv a
- delListFromOccEnv :: OccEnv a -> [OccName] -> OccEnv a
- delFromOccEnv :: OccEnv a -> OccName -> OccEnv a
- alterOccEnv :: (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 :: (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

data NameSpace Source #

#### Instances

Instances details

NFData NameSpace Source # |
Instance details Defined in GHC.Types.Name.Occurrence Methods rnf :: NameSpace -> () Source #
Uniquable NameSpace Source # |
Instance details Defined in GHC.Types.Name.Occurrence Methods getUnique :: NameSpace -> Unique Source #
Binary NameSpace Source # |
Instance details Defined in GHC.Types.Name.Occurrence Methods put_ :: BinHandle -> NameSpace -> IO () Source # put :: BinHandle -> NameSpace -> IO (Bin NameSpace) Source # get :: BinHandle -> IO NameSpace Source #
Eq NameSpace Source # |
Instance details Defined in GHC.Types.Name.Occurrence Methods (==) :: NameSpace -> NameSpace -> Bool # (/=) :: NameSpace -> NameSpace -> Bool #
Ord NameSpace Source # |
Instance details Defined in GHC.Types.Name.Occurrence 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 #

## Construction

tcName :: NameSpace Source #

clsName :: NameSpace Source #

tcClsName :: NameSpace Source #

dataName :: NameSpace Source #

varName :: NameSpace Source #

fieldName :: FastString -> 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 #

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

Instances details

NFData OccName Source # |
Instance details Defined in GHC.Types.Name.Occurrence Methods rnf :: OccName -> () Source #
HasOccName OccName Source # |
Instance details Defined in GHC.Types.Name.Occurrence Methods occName :: OccName -> OccName Source #
Binary OccName Source # |
Instance details Defined in GHC.Types.Name.Occurrence Methods put_ :: BinHandle -> OccName -> IO () Source # put :: BinHandle -> OccName -> IO (Bin OccName) Source # get :: BinHandle -> IO OccName Source #
Outputable OccName Source # |
Instance details Defined in GHC.Types.Name.Occurrence Methods ppr :: OccName -> SDoc Source #
OutputableBndr OccName Source # |
Instance details Defined in GHC.Types.Name.Occurrence Methods pprBndr :: BindingSite -> OccName -> SDoc Source # pprPrefixOcc :: OccName -> SDoc Source # pprInfixOcc :: OccName -> SDoc Source # bndrIsJoin_maybe :: OccName -> JoinPointHood Source #
Data OccName Source # |
Instance details Defined in GHC.Types.Name.Occurrence Methods 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 #
Eq OccName Source # |
Instance details Defined in GHC.Types.Name.Occurrence Methods (==) :: OccName -> OccName -> Bool # (/=) :: OccName -> OccName -> Bool #
Ord OccName Source # |
Instance details Defined in GHC.Types.Name.Occurrence 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 #

pprOccName :: IsLine doc => OccName -> doc Source #

occNameMangledFS :: OccName -> FastString Source #

Mangle field names to avoid duplicate symbols.

See Note [Mangling OccNames].

## Construction

mkOccName :: NameSpace -> String -> OccName Source #

mkOccNameFS :: NameSpace -> FastString -> OccName Source #

mkVarOcc :: String -> OccName Source #

mkVarOccFS :: FastString -> OccName Source #

mkRecFieldOcc :: FastString -> String -> OccName Source #

mkRecFieldOccFS :: FastString -> 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 #

demoteOccTvName :: OccName -> Maybe OccName Source #

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

Methods

occName :: name -> OccName Source #

#### Instances

Instances details

HasOccName IfaceClassOp Source # |
Instance details Defined in GHC.Iface.Syntax Methods occName :: IfaceClassOp -> OccName Source #
HasOccName IfaceConDecl Source # |
Instance details Defined in GHC.Iface.Syntax Methods occName :: IfaceConDecl -> OccName Source #
HasOccName IfaceDecl Source # |
Instance details Defined in GHC.Iface.Syntax Methods occName :: IfaceDecl -> OccName Source #
HasOccName HoleFitCandidate Source # |
Instance details Defined in GHC.Tc.Errors.Hole.FitTypes Methods occName :: HoleFitCandidate -> OccName Source #
HasOccName TcBinder Source # |
Instance details Defined in GHC.Tc.Types.BasicTypes Methods occName :: TcBinder -> OccName Source #
HasOccName FieldLabel Source # |
Instance details Defined in GHC.Types.FieldLabel Methods occName :: FieldLabel -> OccName Source #
HasOccName Name Source # |
Instance details Defined in GHC.Types.Name Methods occName :: Name -> OccName Source #
HasOccName OccName Source # |
Instance details Defined in GHC.Types.Name.Occurrence Methods occName :: OccName -> OccName Source #
HasOccName RdrName Source # |
Instance details Defined in GHC.Types.Name.Reader Methods occName :: RdrName -> OccName Source #
HasOccName Var Source # |
Instance details Defined in GHC.Types.Var Methods occName :: Var -> OccName Source #
HasOccName (GlobalRdrEltX info) Source # |
Instance details Defined in GHC.Types.Name.Reader Methods occName :: GlobalRdrEltX info -> OccName Source #
(HasOccName (IdP (GhcPass p)), OutputableBndrId p) => HasOccName (IEWrappedName (GhcPass p)) Source # |
Instance details Defined in GHC.Hs.ImpExp Methods occName :: IEWrappedName (GhcPass p) -> OccName Source #

## 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 #

mkDictOcc :: OccName -> OccName Source #

mkIPOcc :: OccName -> OccName Source #

mkSpecOcc :: OccName -> OccName Source #

mkForeignExportOcc :: OccName -> OccName Source #

mkRepEqOcc :: OccName -> OccName Source #

mkGenR :: OccName -> OccName Source #

mkGen1R :: OccName -> 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 #

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, field name or data constructor namespaces

isFieldOcc :: OccName -> Bool Source #

fieldOcc_maybe :: OccName -> Maybe FastString Source #

parenSymOcc :: OccName -> SDoc -> SDoc Source #

Wrap parens around an operator

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

data OccEnv a Source #

A map keyed on `OccName`. See Note [OccEnv].

#### Instances

Instances details

Functor OccEnv Source # |
Instance details Defined in GHC.Types.Name.Occurrence Methods fmap :: (a -> b) -> OccEnv a -> OccEnv b # (<$) :: a -> OccEnv b -> OccEnv a #
NFData a => NFData (OccEnv a) Source # |
Instance details Defined in GHC.Types.Name.Occurrence Methods rnf :: OccEnv a -> () Source #
Outputable a => Outputable (OccEnv a) Source # |
Instance details Defined in GHC.Types.Name.Occurrence Methods ppr :: OccEnv a -> SDoc Source #

emptyOccEnv :: OccEnv a Source #

The empty `OccEnv`.

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

A singleton `OccEnv`.

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

Add a single element to an `OccEnv`.

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

Map over an `OccEnv` (`Functor` instance).

strictMapOccEnv :: (a -> b) -> OccEnv a -> OccEnv b Source #

Map over an `OccEnv` strictly.

mapMaybeOccEnv :: (a -> Maybe b) -> OccEnv a -> OccEnv b Source #

`mapMaybe` for b `OccEnv`.

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

Look an element up in an `OccEnv`.

lookupOccEnv_AllNameSpaces :: OccEnv a -> OccName -> [a] Source #

Lookup an element in an `OccEnv`, ignoring `NameSpace`s entirely.

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`.

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

Create an `OccEnv` from a list.

`OccName`s later on in the list override earlier `OccName`s.

mkOccEnv_C Source #

Arguments

:: (a -> a -> a) | old -> new -> result
-> [(OccName, a)] |
-> OccEnv a |

Create an `OccEnv` from a list, combining different values with the same `OccName` using the combining function.

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

Extend an `OccEnv` by a list.

`OccName`s later on in the list override earlier `OccName`s.

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 `f` ( a2 `f` b ) == a2 `f` ( a1 `f` b )` for all `a1`, `a2`, `b`).

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

Union of two `OccEnv`s, right-biased.

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

Union of two `OccEnv`s with a combining function.

extendOccEnv_Acc Source #

Arguments

:: (a -> b -> b) | add to existing
-> (a -> b) | new element
-> OccEnv b | old
-> OccName |
-> a | new
-> OccEnv b |

Add a single element to an `OccEnv`, using a different function whether the `OccName` already exists or not.

filterOccEnv :: (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 :: OccEnv a -> OccName -> OccEnv a Source #

Delete one element from an `OccEnv`.

alterOccEnv :: (Maybe a -> Maybe a) -> OccEnv a -> OccName -> OccEnv a Source #

Alter an `OccEnv`, adding or removing an element at the given key.

minusOccEnv :: OccEnv a -> OccEnv b -> OccEnv a Source #

Remove elements of the first `OccEnv` that appear in the second `OccEnv`.

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 :: (UniqFM NameSpace a -> UniqFM NameSpace b -> UniqFM NameSpace a) -> OccEnv a -> OccEnv b -> OccEnv a Source #

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

forceOccEnv :: (a -> ()) -> OccEnv a -> () Source #

Force an `OccEnv` with the provided function.

intersectOccEnv_C :: (a -> b -> c) -> OccEnv a -> OccEnv b -> OccEnv c Source #

# The `OccSet` type

data OccSet 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 #

elemOccSet :: OccName -> OccSet -> Bool Source #

isEmptyOccSet :: OccSet -> Bool Source #

# Dealing with main

mainOcc :: OccName Source #

ppMainFn :: OccName -> SDoc Source #

# Tidying up

type TidyOccEnv = UniqFM FastString Int Source #

emptyTidyOccEnv :: TidyOccEnv 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 #