module StrQuote (str) where
import Language.Haskell.TH
import Language.Haskell.TH.Quote
str :: QuasiQuoter
str :: QuasiQuoter
str = QuasiQuoter :: (String -> Q Exp)
-> (String -> Q Pat)
-> (String -> Q Type)
-> (String -> Q [Dec])
-> QuasiQuoter
QuasiQuoter
{ quoteExp :: String -> Q Exp
quoteExp = String -> Q Exp
stringE
, quotePat :: String -> Q Pat
quotePat = Pat -> Q Pat
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Pat -> Q Pat) -> (String -> Pat) -> String -> Q Pat
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Lit -> Pat
LitP (Lit -> Pat) -> (String -> Lit) -> String -> Pat
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Lit
StringL
, quoteType :: String -> Q Type
quoteType = Type -> Q Type
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Type -> Q Type) -> (String -> Type) -> String -> Q Type
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TyLit -> Type
LitT (TyLit -> Type) -> (String -> TyLit) -> String -> Type
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> TyLit
StrTyLit
, quoteDec :: String -> Q [Dec]
quoteDec = Q [Dec] -> String -> Q [Dec]
forall a b. a -> b -> a
const (String -> Q [Dec]
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"str is for expressions")
}