haskell-tools-ast-0.1.3.0: Language/Haskell/Tools/AST/TH.hs
-- | 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 |] @)