    {-# LANGUAGE CPP #-}
    {-# LANGUAGE DeriveDataTypeable #-}
    {-# LANGUAGE DeriveFunctor #-}
    {-# LANGUAGE FlexibleContexts #-}
    {-# LANGUAGE FlexibleInstances #-}
    {-# LANGUAGE GADTs #-}
    {-# LANGUAGE KindSignatures #-}
    {-# LANGUAGE PatternSynonyms #-}
    {-# LANGUAGE ScopedTypeVariables #-}
    {-# LANGUAGE StandaloneDeriving #-}
    {-# LANGUAGE TemplateHaskell #-}
    {-# LANGUAGE UndecidableInstances #-} -- Needed for the DataId constraint on ResTyGADTHook
    -- | 'annotate' is a function which given a GHC AST fragment, constructs
    -- a syntax tree which indicates which annotations belong to each specific
    -- part of the fragment.
    --
    -- "Delta" and "Print" provide two interpreters for this structure. You
    -- should probably use those unless you know what you're doing!
    --
    -- The functor 'AnnotationF' has a number of constructors which correspond
    -- to different sitations which annotations can arise. It is hoped that in
    -- future versions of GHC these can be simplified by making suitable
    -- modifications to the AST.

    module Language.Haskell.GHC.ExactPrint.Annotate
           (
             annotate
           , AnnotationF(..)
           , Annotated
           , Annotate(..)
           , withSortKeyContextsHelper

           ) where

    import Language.Haskell.GHC.ExactPrint.Annotater