module Simple.Locale.TranslateTH (
tr,
module Simple.Locale.Translate,
module Data.Proxy
) where
import Language.Haskell.TH
import Language.Haskell.TH.Quote
import Data.Proxy
import Simple.Locale.Translate
tr :: QuasiQuoter
tr :: QuasiQuoter
tr = QuasiQuoter :: (String -> Q Exp)
-> (String -> Q Pat)
-> (String -> Q Type)
-> (String -> Q [Dec])
-> QuasiQuoter
QuasiQuoter
{ quoteExp :: String -> Q Exp
quoteExp = String -> Q Exp
translateTH
, quotePat :: String -> Q Pat
quotePat = String -> String -> Q Pat
forall a. HasCallStack => String -> a
error String
"quotePat not supported"
, quoteType :: String -> Q Type
quoteType = String -> String -> Q Type
forall a. HasCallStack => String -> a
error String
"quoteType not supported"
, quoteDec :: String -> Q [Dec]
quoteDec = String -> String -> Q [Dec]
forall a. HasCallStack => String -> a
error String
"qutoteDec not supported"
}
translateTH :: String -> Q Exp
translateTH :: String -> Q Exp
translateTH String
s = Exp -> Q Exp
forall (m :: * -> *) a. Monad m => a -> m a
return (Exp -> Q Exp) -> Exp -> Q Exp
forall a b. (a -> b) -> a -> b
$
Exp -> Exp -> Exp
AppE
(Name -> Exp
VarE (String -> Name
mkName String
"Simple.Locale.TranslateTH.translate"))
(Exp -> Type -> Exp
SigE
(Name -> Exp
ConE (String -> Name
mkName String
"Simple.Locale.TranslateTH.Proxy"))
(Type -> Type -> Type
AppT
(Name -> Type
ConT (String -> Name
mkName String
"Simple.Locale.TranslateTH.Proxy"))
(TyLit -> Type
LitT (String -> TyLit
StrTyLit String
s))
)
)