ghc-7.8.2: The GHC API

Safe HaskellNone




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


Main Annotation data types

data Annotation Source

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




ann_target :: CoreAnnTarget

The target of the annotation

ann_value :: AnnPayload

type AnnPayload Source


 = 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 Source

An annotation target


NamedTarget name

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

ModuleTarget Module

We are annotating a particular module


type CoreAnnTarget = AnnTarget Name Source

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

getAnnTargetName_maybe :: AnnTarget name -> Maybe name Source

Get the name of an annotation target if it exists.

AnnEnv for collecting and querying Annotations

data AnnEnv Source

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

mkAnnEnv :: [Annotation] -> AnnEnv Source

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

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

Add the given annotation to the environment.

plusAnnEnv :: AnnEnv -> AnnEnv -> AnnEnv Source

Union two annotation environments.

emptyAnnEnv :: AnnEnv Source

An empty annotation environment.

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

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] Source

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