ghc-7.6.3: The GHC API

Safe Haskell | None

Annotations

Contents

- Main Annotation data types
- AnnEnv for collecting and querying 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

- data Annotation = Annotation {
  - ann_target :: CoreAnnTarget
  - ann_value :: Serialized
  }
- data AnnTarget name
  - = NamedTarget name
  - | ModuleTarget Module
- type CoreAnnTarget = AnnTarget Name
- getAnnTargetName_maybe :: AnnTarget name -> Maybe name
- data AnnEnv
- mkAnnEnv :: [Annotation] -> AnnEnv
- extendAnnEnvList :: AnnEnv -> [Annotation] -> AnnEnv
- plusAnnEnv :: AnnEnv -> AnnEnv -> AnnEnv
- emptyAnnEnv :: AnnEnv
- findAnns :: Typeable a => ([Word8] -> a) -> AnnEnv -> CoreAnnTarget -> [a]
- deserializeAnns :: Typeable a => ([Word8] -> a) -> AnnEnv -> UniqFM [a]

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

Instances

Outputable Annotation |

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

Functor AnnTarget |
Outputable name => Outputable (AnnTarget name) |
Uniquable name => Uniquable (AnnTarget name) |
Binary name => Binary (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.

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