{-# LANGUAGE MonoLocalBinds #-}
{-# LANGUAGE OverloadedStrings #-}
module Language.Haskell.Tools.Rewrite.Create.TH where
import Data.String (IsString(..), String)
import Language.Haskell.Tools.AST
import Language.Haskell.Tools.PrettyPrint.Prepare
import Language.Haskell.Tools.Rewrite.Create.Utils (mkAnn, mkAnnList)
import Language.Haskell.Tools.Rewrite.ElementTypes
mkIdSplice :: Name -> Splice
mkIdSplice n = mkAnn ("$" <> child) $ UIdSplice n
mkParenSplice :: Expr -> Splice
mkParenSplice n = mkAnn ("$(" <> child <> ")") $ UParenSplice n
mkQuasiQuote :: Name -> String -> QuasiQuote
mkQuasiQuote n s = mkAnn ("[" <> child <> "|" <> child <> "|]")
$ UQuasiQuote n (mkAnn (fromString s) (QQString s))
mkExprBracket :: Expr -> Bracket
mkExprBracket = mkAnn ("[|" <> child <> "|]") . UExprBracket
mkPatternBracket :: Pattern -> Bracket
mkPatternBracket = mkAnn ("[p|" <> child <> "|]") . UPatternBracket
mkTypeBracket :: Type -> Bracket
mkTypeBracket = mkAnn ("[t|" <> child <> "|]") . UTypeBracket
mkDeclsBracket :: [Decl] -> Bracket
mkDeclsBracket = mkAnn ("[d|" <> child <> "|]") . UDeclsBracket . mkAnnList (indented list)