{-# LANGUAGE FlexibleContexts, TemplateHaskell #-}
-- | Generated references for AST elements.
module Language.Haskell.Tools.AST.References where

import Control.Reference hiding (element)
import Language.Haskell.Tools.AST.MakeASTReferences

import Language.Haskell.Tools.AST.Ann
import Language.Haskell.Tools.AST.Representation.Binds
import Language.Haskell.Tools.AST.Representation.Decls
import Language.Haskell.Tools.AST.Representation.Exprs
import Language.Haskell.Tools.AST.Representation.Kinds
import Language.Haskell.Tools.AST.Representation.Literals
import Language.Haskell.Tools.AST.Representation.Modules
import Language.Haskell.Tools.AST.Representation.Names
import Language.Haskell.Tools.AST.Representation.Patterns
import Language.Haskell.Tools.AST.Representation.Stmts
import Language.Haskell.Tools.AST.Representation.TH
import Language.Haskell.Tools.AST.Representation.Types

-- * Modules
$(toASTReferences (makeReferences ''UModule))
$(toASTReferences (makeReferences ''UModuleHead))
$(toASTReferences (makeReferences ''UExportSpecs))
$(toASTReferences (makeReferences ''UExportSpec))
$(toASTReferences (makeReferences ''UIESpec))
$(toASTReferences (makeReferences ''USubSpec))
$(toASTReferences (makeReferences ''UModulePragma))
$(toASTReferences (makeReferences ''UFilePragma))
$(toASTReferences (makeReferences ''UImportDecl))
$(toASTReferences (makeReferences ''UImportSpec))
$(toASTReferences (makeReferences ''UImportQualified))
$(toASTReferences (makeReferences ''UImportSource))
$(toASTReferences (makeReferences ''UImportSafe))
$(toASTReferences (makeReferences ''UTypeNamespace))
$(toASTReferences (makeReferences ''UImportRenaming))
$(toASTReferences (makeReferences ''UModuleName))
$(toASTReferences (makeReferences ''ULanguageExtension))
$(toASTReferences (makeReferences ''TypeKeyword))

-- * Declarations
$(toASTReferences (makeReferences ''UDecl))
$(toASTReferences (makeReferences ''UClassBody))
$(toASTReferences (makeReferences ''UClassElement))
$(toASTReferences (makeReferences ''UDeclHead))
$(toASTReferences (makeReferences ''UInstBody))
$(toASTReferences (makeReferences ''UInstBodyDecl))
$(toASTReferences (makeReferences ''UTypeFamily))
$(toASTReferences (makeReferences ''UTypeFamilySpec))
$(toASTReferences (makeReferences ''UInjectivityAnn))
$(toASTReferences (makeReferences ''UDataOrNewtypeKeyword))
$(toASTReferences (makeReferences ''UGadtConDecl))
$(toASTReferences (makeReferences ''UGadtConType))
$(toASTReferences (makeReferences ''UPatternSynonym))
$(toASTReferences (makeReferences ''UPatSynRhs))
$(toASTReferences (makeReferences ''UPatSynLhs))
$(toASTReferences (makeReferences ''UPatSynWhere))
$(toASTReferences (makeReferences ''UPatternTypeSignature))
$(toASTReferences (makeReferences ''URole))
$(toASTReferences (makeReferences ''UFunDeps))
$(toASTReferences (makeReferences ''UFunDep))
$(toASTReferences (makeReferences ''UConDecl))
$(toASTReferences (makeReferences ''UFieldDecl))
$(toASTReferences (makeReferences ''UDeriving))
$(toASTReferences (makeReferences ''UInstanceRule))
$(toASTReferences (makeReferences ''UInstanceHead))
$(toASTReferences (makeReferences ''UTypeEqn))
$(toASTReferences (makeReferences ''URule))
$(toASTReferences (makeReferences ''UOverlapPragma))
$(toASTReferences (makeReferences ''UCallConv))
$(toASTReferences (makeReferences ''USafety))
$(toASTReferences (makeReferences ''UPhaseControl))
$(toASTReferences (makeReferences ''PhaseNumber))
$(toASTReferences (makeReferences ''PhaseInvert))
$(toASTReferences (makeReferences ''UTopLevelPragma))
$(toASTReferences (makeReferences ''UAnnotationSubject))
$(toASTReferences (makeReferences ''UMinimalFormula))
$(toASTReferences (makeReferences ''USourceRange))
$(toASTReferences (makeReferences ''Number))


-- * Binds
$(toASTReferences (makeReferences ''UMatch))
$(toASTReferences (makeReferences ''URhs))
$(toASTReferences (makeReferences ''UGuardedRhs))
$(toASTReferences (makeReferences ''URhsGuard))
$(toASTReferences (makeReferences ''ULocalBind))
$(toASTReferences (makeReferences ''ULocalBinds))
$(toASTReferences (makeReferences ''UFixitySignature))
$(toASTReferences (makeReferences ''Assoc))
$(toASTReferences (makeReferences ''Precedence))
$(toASTReferences (makeReferences ''UTypeSignature))
$(toASTReferences (makeReferences ''UMatchLhs))

-- * Kinds
$(toASTReferences (makeReferences ''UKindConstraint))

-- * Types
$(toASTReferences (makeReferences ''UValueBind))
$(toASTReferences (makeReferences ''UTyVar))
$(toASTReferences (makeReferences ''UType))
$(toASTReferences (makeReferences ''UKind))
$(toASTReferences (makeReferences ''UContext))
$(toASTReferences (makeReferences ''UAssertion))

-- * Expressions
$(toASTReferences (makeReferences ''UExpr))
$(toASTReferences (makeReferences ''UAlt'))
$(toASTReferences (makeReferences ''UFieldUpdate))
$(toASTReferences (makeReferences ''UTupSecElem))
$(toASTReferences (makeReferences ''UExprPragma))
$(toASTReferences (makeReferences ''UCaseRhs'))
$(toASTReferences (makeReferences ''UGuardedCaseRhs'))
$(toASTReferences (makeReferences ''UArrowAppl))

-- * Statements
$(toASTReferences (makeReferences ''UStmt'))
$(toASTReferences (makeReferences ''UCompStmt))
$(toASTReferences (makeReferences ''UListCompBody))
$(toASTReferences (makeReferences ''UDoKind))

-- * Patterns
$(toASTReferences (makeReferences ''UPattern))
$(toASTReferences (makeReferences ''UPatternField))

-- * Template Haskell
$(toASTReferences (makeReferences ''USplice))
$(toASTReferences (makeReferences ''UQuasiQuote))
$(toASTReferences (makeReferences ''QQString))
$(toASTReferences (makeReferences ''UBracket))

-- * Literals
$(toASTReferences (makeReferences ''ULiteral))
$(toASTReferences (makeReferences ''UPromoted))

-- * Names
$(toASTReferences (makeReferences ''UOperator))
$(toASTReferences (makeReferences ''UName))
$(toASTReferences (makeReferences ''UQualifiedName))
$(toASTReferences (makeReferences ''UNamePart))
$(toASTReferences (makeReferences ''UStringNode))