rawstring-qm 0.2.2 → 0.2.2.1
raw patch · 2 files changed
+29/−1 lines, 2 files
Files
- rawstring-qm.cabal +1/−1
- src/Data/String/QM.hs +28/−0
rawstring-qm.cabal view
@@ -1,5 +1,5 @@ name: rawstring-qm-version: 0.2.2+version: 0.2.2.1 cabal-version: >=1.10 synopsis: Simple raw string quotation and dictionary interpolation description: Supply a couple of usefull QuasiQuotes so we can use functions to lookup values
src/Data/String/QM.hs view
@@ -6,6 +6,7 @@ module Data.String.QM ( qq , qm+ , qn , qt , qtl )@@ -47,6 +48,14 @@ (error "Cannot use qm as a type") (error "Cannot use qm as a dec") +-- | QuasiQuoter for interpolating '${expr}' into a string literal.+-- var and expr are just Names+qn :: QuasiQuoter+qn = QuasiQuoter (makeExpr . parseQN [])+ (error "Cannot use qm as a pattern")+ (error "Cannot use qm as a type")+ (error "Cannot use qm as a dec")+ -- | QuasiQuoter for interpolating '$var' and '${expr}' into a string literal. -- var and expr are just Names output is of type text vars are auto converted to text qt :: QuasiQuoter@@ -79,6 +88,25 @@ unQM a "\\" = unQM ('\\':a) [] unQM a ('}':xs) = AntiQuote (reverse a) : parseQM [] xs unQM a (x:xs) = unQM (x:a) xs++++parseQN a [] = [Literal (reverse a)]+parseQN a ('\\':x:xs) = parseQN (x:a) xs+parseQN a "\\" = parseQN ('\\':a) []++parseQN a ('$':'{':xs) = Literal (reverse a) : unQN [] xs+-- parseQN a ('$':x:xs) | x == '_' || isAlpha x =+-- Literal (reverse a) : AntiQuote (x:pre) : parseQN [] post+-- where+-- (pre, post) = span isIdent xs+parseQN a (x:xs) = parseQN (x:a) xs+++unQN a ('\\':x:xs) = unQN (x:a) xs+unQN a "\\" = unQN ('\\':a) []+unQN a ('}':xs) = AntiQuote (reverse a) : parseQN [] xs+unQN a (x:xs) = unQN (x:a) xs makeExpr [] = ls "" makeExpr (Literal a:xs) = TH.appE [| (++) a |]