1 module Data.HList.String
7 import Data.HList.Number
8 import Data.HList.Prelude
9 import Language.Haskell.TH
10 import Language.Haskell.TH.Quote
17 instance HNat c => HString (HCons c s)
19 hString :: QuasiQuoter
20 hString = QuasiQuoter quoteStrExp quoteStrPat
22 quoteStrExp :: String -> ExpQ
23 quoteStrExp [] = varE (mkName "hNil")
24 quoteStrExp (c:cs) = appsE [ varE (mkName "hCons")
25 , hNatLiteralE (fromEnum c)
29 quoteStrPat :: String -> PatQ
30 quoteStrPat [] = varP (mkName "HNil")
31 quoteStrPat (c:cs) = conP (mkName "HCons") [ hNatLiteralP (fromEnum c)