module Language.Haskell.Tools.AST.Gen.TH where
import qualified Name as GHC
import Data.List
import Data.String
import Data.Function (on)
import Control.Reference
import Language.Haskell.Tools.AST
import Language.Haskell.Tools.AST.ElementTypes
import Language.Haskell.Tools.AST.Gen.Names
import Language.Haskell.Tools.AST.Gen.Utils
import Language.Haskell.Tools.Transform
mkIdSplice :: Name dom -> Splice dom
mkIdSplice n = mkAnn ("$" <> child) $ UIdSplice n
mkParenSplice :: Expr dom -> Splice dom
mkParenSplice n = mkAnn ("$(" <> child <> ")") $ UParenSplice n
mkQuasiQuote :: Name dom -> String -> QuasiQuote dom
mkQuasiQuote n s = mkAnn ("[" <> child <> "|" <> child <> "|]")
$ UQuasiQuote n (mkAnn (fromString s) (QQString s))
mkExprBracket :: Expr dom -> Bracket dom
mkExprBracket = mkAnn ("[|" <> child <> "|]") . UExprBracket
mkPatternBracket :: Pattern dom -> Bracket dom
mkPatternBracket = mkAnn ("[p|" <> child <> "|]") . UPatternBracket
mkTypeBracket :: Type dom -> Bracket dom
mkTypeBracket = mkAnn ("[t|" <> child <> "|]") . UTypeBracket
mkDeclsBracket :: [Decl dom] -> Bracket dom
mkDeclsBracket = mkAnn ("[d|" <> child <> "|]") . UDeclsBracket . mkAnnList (indented list)