{-# LANGUAGE TemplateHaskell, QuasiQuotes #-} 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 }