X-Git-Url: http://git.cielonegro.org/gitweb.cgi?p=hs-rrdtool.git;a=blobdiff_plain;f=Data%2FHList%2FString.hs;fp=Data%2FHList%2FString.hs;h=bcec59c6d750ab623878087757d95302453fa7e3;hp=a51457ed3a336f055df4ae3866353011cdcdba62;hb=4611522487b382b839a53e75e3feb2aac8764074;hpb=135df1a5d8a159db412614bcfc25634bee201f94 diff --git a/Data/HList/String.hs b/Data/HList/String.hs index a51457e..bcec59c 100644 --- a/Data/HList/String.hs +++ b/Data/HList/String.hs @@ -1,6 +1,33 @@ module Data.HList.String - ( + ( HString + , hString ) where ---import Data.HList.Prelude +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 + ]