1{-# LANGUAGE TemplateHaskell #-} 2module QQ (str) where 3 4import Language.Haskell.TH 5 ( mkName, 6 stringL, 7 litP, 8 clause, 9 litE, 10 normalB, 11 funD, 12 sigD, 13 litT, 14 strTyLit ) 15import Language.Haskell.TH.Quote (QuasiQuoter (..)) 16 17str :: QuasiQuoter 18str = 19 QuasiQuoter 20 { quoteExp = litE . stringL 21 , quotePat = litP . stringL 22 , quoteType = litT . strTyLit 23 , quoteDec = \name -> 24 sequence 25 [ sigD (mkName name) [t|String|] 26 , funD (mkName name) [clause [] (normalB $ litE $ stringL name) []] 27 ] 28 } 29