This module contains some utilities and generic code for working with asts and annotations which depend on the ast types.
> {-# LANGUAGE ScopedTypeVariables #-}
>
> module Database.HsSqlPpp.Internals.AnnotationUtils
>     (
>      getStatementAnnotations
>     ,resetAnnotations
>     ) where
>
> import Data.Data
> import Data.Generics.Uniplate.Data
>
> import Database.HsSqlPpp.Internals.AstInternal
> import Database.HsSqlPpp.Internals.AstAnnotation
>
> -- | Run through the ast and return all the annotations attached to
> --   a Statement node.
> getStatementAnnotations :: Data a => a -> [Annotation]
> getStatementAnnotations st =
>     [getAnnotation s | (s::Statement) <- universeBi st]
> -- | Set all the annotations in a tree to be 'emptyAnnotation'.
> resetAnnotations :: Data a => a -> a
> resetAnnotations =
>     updateAnnotations (const emptyAnnotation)