ghc-7.6.3: 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 :: Serialized

Serialized version of the annotation that allows recovery of its value or 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 NameSource

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

getAnnTargetName_maybe :: AnnTarget name -> Maybe nameSource

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

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

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

Add the given annotation to the environment.

plusAnnEnv :: AnnEnv -> AnnEnv -> AnnEnvSource

Union two annotation environments.

emptyAnnEnv :: AnnEnvSource

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