ghc-7.0.3: The GHC API

Name

Contents

- The main types
  - Creating `Name`s
  - Manipulating and deconstructing `Name`s
  - Predicates on `Name`s
- Class `NamedThing` and overloaded friends

Description

GHC uses several kinds of name internally:

- `OccName`: see OccName
- `RdrName.RdrName`: see RdrName
- `Name` is the type of names that have had their scoping and binding resolved. They have an `OccName` but also a `Unique` that disambiguates Names that have the same `OccName` and indeed is used for all `Name` comparison. Names also contain information about where they originated from, see Name
- `Id.Id`: see Id
- `Var.Var`: see Var

Names are one of:

- External, if they name things declared in other modules. Some external Names are wired in, i.e. they name primitives defined in the compiler itself
- Internal, if they name things in the module being compiled. Some internal Names are system names, if they are names manufactured by the compiler

Synopsis

- data Name
- data BuiltInSyntax
  - = BuiltInSyntax
  - | UserSyntax
- mkInternalName :: Unique -> OccName -> SrcSpan -> Name
- mkSystemName :: Unique -> OccName -> Name
- mkDerivedInternalName :: (OccName -> OccName) -> Unique -> Name -> Name
- mkSystemVarName :: Unique -> FastString -> Name
- mkSysTvName :: Unique -> FastString -> Name
- mkFCallName :: Unique -> String -> Name
- mkIPName :: Unique -> OccName -> Name
- mkTickBoxOpName :: Unique -> String -> Name
- mkExternalName :: Unique -> Module -> OccName -> SrcSpan -> Name
- mkWiredInName :: Module -> OccName -> Unique -> TyThing -> BuiltInSyntax -> Name
- nameUnique :: Name -> Unique
- setNameUnique :: Name -> Unique -> Name
- nameOccName :: Name -> OccName
- nameModule :: Name -> Module
- nameModule_maybe :: Name -> Maybe Module
- tidyNameOcc :: Name -> OccName -> Name
- hashName :: Name -> Int
- localiseName :: Name -> Name
- nameSrcLoc :: Name -> SrcLoc
- nameSrcSpan :: Name -> SrcSpan
- pprNameLoc :: Name -> SDoc
- isSystemName :: Name -> Bool
- isInternalName :: Name -> Bool
- isExternalName :: Name -> Bool
- isTyVarName :: Name -> Bool
- isTyConName :: Name -> Bool
- isDataConName :: Name -> Bool
- isValName :: Name -> Bool
- isVarName :: Name -> Bool
- isWiredInName :: Name -> Bool
- isBuiltInSyntax :: Name -> Bool
- wiredInNameTyThing_maybe :: Name -> Maybe TyThing
- nameIsLocalOrFrom :: Module -> Name -> Bool
- class NamedThing a where
  - getOccName :: a -> OccName
  - getName :: a -> Name
- getSrcLoc :: NamedThing a => a -> SrcLoc
- getSrcSpan :: NamedThing a => a -> SrcSpan
- getOccString :: NamedThing a => a -> String
- pprInfixName :: (Outputable a, NamedThing a) => a -> SDoc
- pprPrefixName :: (Outputable a, NamedThing a) => a -> SDoc
- pprModulePrefix :: PprStyle -> Module -> OccName -> SDoc
- module OccName

# The main types

data Name

A unique, unambigious name for something, containing information about where that thing originated.

Instances

Eq Name |
Data Name |
Data NameSet |
Ord Name |
Typeable Name |
Typeable NameSet |
OutputableBndr Name |
Outputable Name |
Uniquable Name |
Binary Name |
NamedThing Name |

data BuiltInSyntax

BuiltInSyntax is for things like `(:)`, `[]` and tuples, which have special syntactic forms. They aren't in scope as such.

Constructors

BuiltInSyntax |
UserSyntax |

## Creating `Name`s

mkInternalName :: Unique -> OccName -> SrcSpan -> Name

Create a name which is (for now at least) local to the current module and hence does not need a `Module` to disambiguate it from other `Name`s

mkSystemName :: Unique -> OccName -> Name

Create a name brought into being by the compiler

mkDerivedInternalName :: (OccName -> OccName) -> Unique -> Name -> Name

mkSystemVarName :: Unique -> FastString -> Name

mkSysTvName :: Unique -> FastString -> Name

mkFCallName :: Unique -> String -> Name

Make a name for a foreign call

mkIPName :: Unique -> OccName -> Name

Make the name of an implicit parameter

mkTickBoxOpName :: Unique -> String -> Name

mkExternalName :: Unique -> Module -> OccName -> SrcSpan -> Name

Create a name which definitely originates in the given module

mkWiredInName :: Module -> OccName -> Unique -> TyThing -> BuiltInSyntax -> Name

Create a name which is actually defined by the compiler itself

## Manipulating and deconstructing `Name`s

nameUnique :: Name -> Unique

setNameUnique :: Name -> Unique -> Name

nameOccName :: Name -> OccName

nameModule :: Name -> Module

nameModule_maybe :: Name -> Maybe Module

tidyNameOcc :: Name -> OccName -> Name

hashName :: Name -> Int

localiseName :: Name -> Name

Make the `Name` into an internal name, regardless of what it was to begin with

nameSrcLoc :: Name -> SrcLoc

nameSrcSpan :: Name -> SrcSpan

pprNameLoc :: Name -> SDoc

## Predicates on `Name`s

isSystemName :: Name -> Bool

isInternalName :: Name -> Bool

isExternalName :: Name -> Bool

isTyVarName :: Name -> Bool

isTyConName :: Name -> Bool

isDataConName :: Name -> Bool

isValName :: Name -> Bool

isVarName :: Name -> Bool

isWiredInName :: Name -> Bool

isBuiltInSyntax :: Name -> Bool

wiredInNameTyThing_maybe :: Name -> Maybe TyThing

nameIsLocalOrFrom :: Module -> Name -> Bool

# Class `NamedThing` and overloaded friends

class NamedThing a where

A class allowing convenient access to the `Name` of various datatypes

Methods

getOccName :: a -> OccName

getName :: a -> Name

Instances

NamedThing TyCon |
NamedThing TyThing |
NamedThing Name |
NamedThing Var |
NamedThing Class |
NamedThing DataCon |
NamedThing Instance |
NamedThing FamInst |

getSrcLoc :: NamedThing a => a -> SrcLoc

getSrcSpan :: NamedThing a => a -> SrcSpan

getOccString :: NamedThing a => a -> String

pprInfixName :: (Outputable a, NamedThing a) => a -> SDoc

pprPrefixName :: (Outputable a, NamedThing a) => a -> SDoc

pprModulePrefix :: PprStyle -> Module -> OccName -> SDoc

module OccName