command-qq 0.2.2.0 → 0.3.0.0
raw patch · 4 files changed
+21/−17 lines, 4 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- CHANGELOG.md +5/−0
- command-qq.cabal +2/−2
- src/System/Command/QQ.hs +13/−10
- src/System/Command/QQ/Predef.hs +1/−5
CHANGELOG.md view
@@ -1,3 +1,8 @@+0.3.0.0+=======++ * Added another way to avoid variable expansion (`\\#{foo}` is replaced with `#{foo}`)+ 0.2.2.0 =======
command-qq.cabal view
@@ -1,5 +1,5 @@ name: command-qq-version: 0.2.2.0+version: 0.3.0.0 synopsis: Quasiquoters for external commands description: Features:@@ -48,7 +48,7 @@ source-repository this type: git location: https://github.com/biegunka/command-qq- tag: 0.2.2.0+ tag: 0.3.0.0 library default-language: Haskell2010
src/System/Command/QQ.hs view
@@ -135,22 +135,25 @@ substituteVars :: String -> Q Exp substituteVars = raw where raw, var :: String -> Q Exp- raw (break (== '#') -> parts) = case parts of- (before, '#':'{' :after) -> [e| before ++ $(var after) |]- (before, '#':'\\':after) -> [e| before ++ '#' : $(raw after) |]- (before, '#':after) -> [e| before ++ '#' : $(raw after) |]- (before, []) -> [e| before |]- _ -> fail "Should never happen"+ raw str = case break (== '\\') str of+ (before, '\\' : '\\' : after) -> [e| before ++ '\\' : $(raw after) |]+ (before, '\\' : '#' : '{' : after) -> [e| before ++ '#' : '{' : $(raw after) |]+ (_, _) -> case break (== '#') str of+ (before, '#' : '{' : after) -> [e| before ++ $(var after) |]+ (before, '#' : '\\' : after) -> [e| before ++ '#' : $(raw after) |]+ (before, '#' : after) -> [e| before ++ '#' : $(raw after) |]+ (before, []) -> [e| before |]+ _ -> fail "Should never happen" var (break (== '}') -> parts) = case parts of- (b:efore, '}':after)- | isLower b -> external (VarE (mkName (b:efore))) after- | isUpper b -> external (ConE (mkName (b:efore))) after+ (b : efore, '}' : after)+ | isLower b -> external (VarE (mkName (b:efore))) after+ | isUpper b -> external (ConE (mkName (b:efore))) after | Just i <- readMaybe (b:efore) -> external (LitE (IntegerL i)) after | Just d <- readMaybe (b:efore) -> external (LitE (RationalL (toRational (d :: Double)))) after | Just c <- readMaybe (b:efore) -> external (LitE (CharL c)) after | Just s <- readMaybe (b:efore) -> external (LitE (StringL s)) after- (before, _) -> fail $ "Invalid name: " ++ before+ (before, _) -> fail $ "Invalid name: " ++ before external :: Exp -> String -> Q Exp external e after = [e| embed $(return e) ++ $(raw after) |]
src/System/Command/QQ/Predef.hs view
@@ -17,12 +17,9 @@ awk :: QuasiQuoter awk = quoter $ callCommand "awk" [] - -- | @ghci@ interpreter ghci :: QuasiQuoter-ghci =- quoter $ callCommand "ghc" ["-ignore-dot-ghci", "-e"]-+ghci = quoter $ callCommand "ghc" ["-ignore-dot-ghci", "-e"] -- | @perl@ interpreter perl :: QuasiQuoter@@ -31,7 +28,6 @@ -- | @ruby@ interpreter ruby :: QuasiQuoter ruby = interpreter "ruby"- -- | @python@ interpreter python :: QuasiQuoter