module Language.Javascript.JSC.JMacro (
evalJM
, evalJME
) where
import Language.Haskell.TH.Quote (QuasiQuoter(..))
import Language.Haskell.TH
(varE, appE, Lit(..), Exp(..), mkName, ExpQ)
import Language.Javascript.JMacro (jmacro, jmacroE, renderJs)
evalJME :: QuasiQuoter
evalJME = jmacroE {quoteExp = quoteEvalJME}
quoteEvalJME :: String -> ExpQ
quoteEvalJME s =
appE (varE 'return) [|AppE (VarE $ mkName "Language.Javascript.JSC.eval")
(LitE . StringL . show $ renderJs $(quoteExp jmacroE s))|]
evalJM :: QuasiQuoter
evalJM = jmacro {quoteExp = quoteEvalJM}
quoteEvalJM :: String -> ExpQ
quoteEvalJM s =
appE (varE 'return) [|AppE (VarE $ mkName "Language.Javascript.JSC.eval")
(LitE . StringL . show $ renderJs $(quoteExp jmacro s))|]