module Here (printf, here) where
import Language.Haskell.TH
import Language.Haskell.TH.Quote
printf :: QuasiQuoter
printf = QuasiQuoter {
quoteExp = buildFun . parsePrintf,
quotePat = undefined,
quoteType = undefined,
quoteDec = undefined
}
data Printf
= Lit Char
| String
| Dec
| Float
| Show
| Char
deriving (Show, Eq)
parsePrintf :: String -> [Printf]
parsePrintf (c : _) = [Lit c]
buildFun :: [Printf] -> ExpQ
buildFun [Lit c] = [| putChar c |]
here :: QuasiQuoter
here = QuasiQuoter {
quoteExp = litE . stringL . tail,
quotePat = undefined,
quoteType = undefined,
quoteDec = undefined
}