-- | Representation of Template Haskell AST elements module Language.Haskell.Tools.AST.TH where import Language.Haskell.Tools.AST.Decls import Language.Haskell.Tools.AST.Binds import Language.Haskell.Tools.AST.Exprs import Language.Haskell.Tools.AST.Patterns import Language.Haskell.Tools.AST.Types import Language.Haskell.Tools.AST.Base import Language.Haskell.Tools.AST.Ann -- | A template haskell splice data Splice dom stage = IdSplice { _spliceId :: Ann Name dom stage } -- ^ A simple name splice: @$generateX@ | ParenSplice { _spliceExpr :: Ann Expr dom stage } -- ^ A splice with parentheses: @$(generate input)@ -- | Template haskell quasi-quotation: @[quoter|str]@ data QuasiQuote dom stage = QuasiQuote { _qqExprName :: Ann Name dom stage , _qqExprBody :: Ann QQString dom stage } -- | Template Haskell Quasi-quotation content data QQString dom stage = QQString { _qqString :: String } -- | Template Haskell bracket expressions data Bracket dom stage = ExprBracket { _bracketExpr :: Ann Expr dom stage } -- ^ Expression bracket (@ [| x + y |] @) | PatternBracket { _bracketPattern :: Ann Pattern dom stage } -- ^ Pattern bracket (@ [| Point x y |] @) | TypeBracket { _bracketType :: Ann Type dom stage } -- ^ Pattern bracket (@ [| (Int,Int) |] @) | DeclsBracket { _bracketDecl :: AnnList Decl dom stage } -- ^ Declaration bracket (@ [| _f :: Int -> Int; f x = x*x |] @)