module Data.HList.String ( HString , hString ) where import Data.HList.Number import Data.HList.Prelude import Language.Haskell.TH import Language.Haskell.TH.Quote class HString s instance HString HNil instance HNat c => HString (HCons c s) hString :: QuasiQuoter hString = QuasiQuoter quoteStrExp quoteStrPat quoteStrExp :: String -> ExpQ quoteStrExp [] = varE (mkName "hNil") quoteStrExp (c:cs) = appsE [ varE (mkName "hCons") , hNatLiteralE (fromEnum c) , quoteStrExp cs ] quoteStrPat :: String -> PatQ quoteStrPat [] = varP (mkName "HNil") quoteStrPat (c:cs) = conP (mkName "HCons") [ hNatLiteralP (fromEnum c) , quoteStrPat cs ]