{-# LANGUAGE TemplateHaskell #-} module QQ (str) where import Language.Haskell.TH ( mkName, stringL, litP, clause, litE, normalB, funD, sigD, litT, strTyLit ) import Language.Haskell.TH.Quote (QuasiQuoter (..)) str :: QuasiQuoter str = QuasiQuoter { quoteExp = litE . stringL , quotePat = litP . stringL , quoteType = litT . strTyLit , quoteDec = \name -> sequence [ sigD (mkName name) [t|String|] , funD (mkName name) [clause [] (normalB $ litE $ stringL name) []] ] }