1 module Data.HList.String
7 import Data.HList.Prelude
8 import Language.Haskell.TH
9 import Language.Haskell.TH.Quote
10 import Types.Data.Num.Decimal.Literals.TH
11 import Types.Data.Num.Ops
14 class (Show s, Eq s) => HString s
26 hString :: QuasiQuoter
27 hString = QuasiQuoter quoteStrExp quoteStrPat
29 quoteStrExp :: String -> ExpQ
30 quoteStrExp [] = varE (mkName "hNil")
31 quoteStrExp (c:cs) = appsE [ varE (mkName "hCons")
32 , decLiteralV (toInteger $ fromEnum c)
36 quoteStrPat :: String -> PatQ
37 quoteStrPat [] = varP (mkName "Nil")
38 quoteStrPat (c:cs) = conP (mkName "Cons")
39 [ sigP wildP (decLiteralT $ toInteger $ fromEnum c)