ghc-8.8.3: The GHC API
Safe HaskellNone
LanguageHaskell2010

Annotations

Description

Support for source code annotation feature of GHC. That is the ANN pragma.

(c) The University of Glasgow 2006 (c) The GRASP/AQUA Project, Glasgow University, 1992-1998

Synopsis

Main Annotation data types

data Annotation #

Represents an annotation after it has been sufficiently desugared from it's initial form of AnnDecl

Constructors

Annotation 

Fields

Instances

Instances details
Outputable Annotation # 
Instance details

Defined in Annotations

type AnnPayload #

Arguments

 = Serialized

The "payload" of an annotation allows recovery of its value at a given type, and can be persisted to an interface file

data AnnTarget name #

An annotation target

Constructors

NamedTarget name

We are annotating something with a name: a type or identifier

ModuleTarget Module

We are annotating a particular module

Instances

Instances details
Functor AnnTarget # 
Instance details

Defined in Annotations

Methods

fmap :: (a -> b) -> AnnTarget a -> AnnTarget b Source #

(<$) :: a -> AnnTarget b -> AnnTarget a Source #

Outputable name => Outputable (AnnTarget name) # 
Instance details

Defined in Annotations

Methods

ppr :: AnnTarget name -> SDoc #

pprPrec :: Rational -> AnnTarget name -> SDoc #

Uniquable name => Uniquable (AnnTarget name) # 
Instance details

Defined in Annotations

Methods

getUnique :: AnnTarget name -> Unique #

Binary name => Binary (AnnTarget name) # 
Instance details

Defined in Annotations

Methods

put_ :: BinHandle -> AnnTarget name -> IO () #

put :: BinHandle -> AnnTarget name -> IO (Bin (AnnTarget name)) #

get :: BinHandle -> IO (AnnTarget name) #

type CoreAnnTarget = AnnTarget Name #

The kind of annotation target found in the middle end of the compiler

getAnnTargetName_maybe :: AnnTarget name -> Maybe name #

Get the name of an annotation target if it exists.

AnnEnv for collecting and querying Annotations

data AnnEnv #

A collection of annotations Can't use a type synonym or we hit bug #2412 due to source import

mkAnnEnv :: [Annotation] -> AnnEnv #

Construct a new annotation environment that contains the list of annotations provided.

extendAnnEnvList :: AnnEnv -> [Annotation] -> AnnEnv #

Add the given annotation to the environment.

plusAnnEnv :: AnnEnv -> AnnEnv -> AnnEnv #

Union two annotation environments.

emptyAnnEnv :: AnnEnv #

An empty annotation environment.

findAnns :: Typeable a => ([Word8] -> a) -> AnnEnv -> CoreAnnTarget -> [a] #

Find the annotations attached to the given target as Typeable values of your choice. If no deserializer is specified, only transient annotations will be returned.

findAnnsByTypeRep :: AnnEnv -> CoreAnnTarget -> TypeRep -> [[Word8]] #

Find the annotations attached to the given target as Typeable values of your choice. If no deserializer is specified, only transient annotations will be returned.

deserializeAnns :: Typeable a => ([Word8] -> a) -> AnnEnv -> UniqFM [a] #

Deserialize all annotations of a given type. This happens lazily, that is no deserialization will take place until the [a] is actually demanded and the [a] can also be empty (the UniqFM is not filtered).