-- | Data instances for Haskell AST (used for generics)
{-# LANGUAGE FlexibleContexts, StandaloneDeriving, DeriveDataTypeable #-}
module Language.Haskell.Tools.AST.Instances.Data where

import Data.Data

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

-- Annotations
deriving instance (DomainWith e dom, SourceInfo stage, Typeable e, Data (e dom stage)) => Data (Ann e dom stage)
deriving instance (DomainWith e dom, SourceInfo stage, Typeable e, Data (e dom stage)) => Data (AnnMaybeG e dom stage)
deriving instance (DomainWith e dom, SourceInfo stage, Typeable e, Data (e dom stage)) => Data (AnnListG e dom stage)

-- Modules
deriving instance (Domain dom, SourceInfo stage) => Data (UModule dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UModuleHead dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UExportSpecs dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UExportSpec dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UIESpec dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (USubSpec dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UModulePragma dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UFilePragma dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UImportDecl dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UImportSpec dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UImportQualified dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UImportSource dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UImportSafe dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UTypeNamespace dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UImportRenaming dom stage)

-- Declarations
deriving instance (Domain dom, SourceInfo stage) => Data (UDecl dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UClassBody dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UClassElement dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UDeclHead dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UInstBody dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UInstBodyDecl dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UGadtConDecl dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UGadtConType dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UFieldWildcard dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UFunDeps dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UFunDep dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UConDecl dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UFieldDecl dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UDeriving dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UInstanceRule dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UInstanceHead dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UTypeEqn dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UKindConstraint dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UTyVar dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UType dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UKind dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UContext dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UAssertion dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UExpr dom stage)
deriving instance (DomainWith expr dom, SourceInfo stage, Typeable expr, Data (expr dom stage)) => Data (UStmt' expr dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UCompStmt dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UValueBind dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UPattern dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UPatternField dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (USplice dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (QQString dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UMatch dom stage)
deriving instance (DomainWith expr dom, SourceInfo stage, Typeable expr, Data (expr dom stage)) => Data (UAlt' expr dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (URhs dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UGuardedRhs dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UFieldUpdate dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UBracket dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UTopLevelPragma dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (URule dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UAnnotationSubject dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UMinimalFormula dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UExprPragma dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (USourceRange dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (Number dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UQuasiQuote dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (URhsGuard dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (ULocalBind dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (ULocalBinds dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UFixitySignature dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UTypeSignature dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UListCompBody dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UTupSecElem dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UTypeFamily dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UTypeFamilySpec dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UInjectivityAnn dom stage)
deriving instance (DomainWith expr dom, SourceInfo stage, Typeable expr, Data (expr dom stage)) => Data (UCaseRhs' expr dom stage)
deriving instance (DomainWith expr dom, SourceInfo stage, Typeable expr, Data (expr dom stage))=> Data (UGuardedCaseRhs' expr dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UPatternSynonym dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UPatSynRhs dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UPatSynLhs dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UPatSynWhere dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UPatternTypeSignature dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (URole dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UCmd dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (ULanguageExtension dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UMatchLhs dom stage)

-- ULiteral
deriving instance (Domain dom, SourceInfo stage) => Data (ULiteral dom stage)
deriving instance (DomainWith k dom, SourceInfo stage, Typeable k, Data (k dom stage)) => Data (UPromoted k dom stage)

-- Base
deriving instance (Domain dom, SourceInfo stage) => Data (UOperator dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UName dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UQualifiedName dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UModuleName dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UNamePart dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UStringNode dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UDataOrNewtypeKeyword dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UDoKind dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (TypeKeyword dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UOverlapPragma dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UCallConv dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UArrowAppl dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (USafety dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UConlikeAnnot dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (Assoc dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (Precedence dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (LineNumber dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (UPhaseControl dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (PhaseNumber dom stage)
deriving instance (Domain dom, SourceInfo stage) => Data (PhaseInvert dom stage)