From 014a8b3a9a670699f6fc8f1b2196154530d6890a Mon Sep 17 00:00:00 2001
From: Reiner Pope <reiner.pope@gmail.com>
Date: Thu, 16 Feb 2012 10:58:28 +1100
Subject: [PATCH] StringPrimL now takes [Word8]
---
Language/Haskell/TH/Lib.hs | 3 ++-
Language/Haskell/TH/Ppr.hs | 8 ++++++--
Language/Haskell/TH/Syntax.hs | 3 ++-
3 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/Language/Haskell/TH/Lib.hs b/Language/Haskell/TH/Lib.hs
index 92f3dd4..8154fa6 100644
|
a
|
b
|
|
| 9 | 9 | |
| 10 | 10 | import Language.Haskell.TH.Syntax |
| 11 | 11 | import Control.Monad( liftM, liftM2 ) |
| | 12 | import Data.Word( Word8 ) |
| 12 | 13 | |
| 13 | 14 | ---------------------------------------------------------- |
| 14 | 15 | -- * Type synonyms |
| … |
… |
|
| 53 | 54 | charL = CharL |
| 54 | 55 | stringL :: String -> Lit |
| 55 | 56 | stringL = StringL |
| 56 | | stringPrimL :: String -> Lit |
| | 57 | stringPrimL :: [Word8] -> Lit |
| 57 | 58 | stringPrimL = StringPrimL |
| 58 | 59 | rationalL :: Rational -> Lit |
| 59 | 60 | rationalL = RationalL |
diff --git a/Language/Haskell/TH/Ppr.hs b/Language/Haskell/TH/Ppr.hs
index 53f43ff..d3d5a1a 100644
|
a
|
b
|
|
| 9 | 9 | import Text.PrettyPrint (render) |
| 10 | 10 | import Language.Haskell.TH.PprLib |
| 11 | 11 | import Language.Haskell.TH.Syntax |
| 12 | | import Data.Char ( toLower ) |
| | 12 | import Data.Word ( Word8 ) |
| | 13 | import Data.Char ( toLower, chr ) |
| 13 | 14 | import GHC.Show ( showMultiLineString ) |
| 14 | 15 | |
| 15 | 16 | nestDepth :: Int |
| … |
… |
|
| 173 | 174 | pprLit i (IntegerL x) = parensIf (i > noPrec && x < 0) (integer x) |
| 174 | 175 | pprLit _ (CharL c) = text (show c) |
| 175 | 176 | pprLit _ (StringL s) = pprString s |
| 176 | | pprLit _ (StringPrimL s) = pprString s <> char '#' |
| | 177 | pprLit _ (StringPrimL s) = pprString (bytesToString s) <> char '#' |
| 177 | 178 | pprLit i (RationalL rat) = parensIf (i > noPrec) $ rational rat |
| 178 | 179 | |
| | 180 | bytesToString :: [Word8] -> String |
| | 181 | bytesToString = map (chr . fromIntegral) |
| | 182 | |
| 179 | 183 | pprString :: String -> Doc |
| 180 | 184 | -- Print newlines as newlines with Haskell string escape notation, |
| 181 | 185 | -- not as '\n'. For other non-printables use regular escape notation. |
diff --git a/Language/Haskell/TH/Syntax.hs b/Language/Haskell/TH/Syntax.hs
index 9c464cf..25909e6 100644
|
a
|
b
|
|
| 65 | 65 | import Control.Monad (liftM) |
| 66 | 66 | import System.IO ( hPutStrLn, stderr ) |
| 67 | 67 | import Data.Char ( isAlpha ) |
| | 68 | import Data.Word ( Word8 ) |
| 68 | 69 | |
| 69 | 70 | ----------------------------------------------------- |
| 70 | 71 | -- |
| … |
… |
|
| 791 | 792 | | WordPrimL Integer |
| 792 | 793 | | FloatPrimL Rational |
| 793 | 794 | | DoublePrimL Rational |
| 794 | | | StringPrimL String -- ^ A primitive C-style string, type Addr# |
| | 795 | | StringPrimL [Word8] -- ^ A primitive C-style string, type Addr# |
| 795 | 796 | deriving( Show, Eq, Data, Typeable ) |
| 796 | 797 | |
| 797 | 798 | -- We could add Int, Float, Double etc, as we do in HsLit, |