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/Language/Haskell/TH/Lib.hs
+++ b/Language/Haskell/TH/Lib.hs
@@ -9,6 +9,7 @@ module Language.Haskell.TH.Lib where
 
 import Language.Haskell.TH.Syntax
 import Control.Monad( liftM, liftM2 )
+import Data.Word( Word8 )
 
 ----------------------------------------------------------
 -- * Type synonyms
@@ -53,7 +54,7 @@ charL       :: Char -> Lit
 charL       = CharL
 stringL     :: String -> Lit
 stringL     = StringL
-stringPrimL :: String -> Lit
+stringPrimL :: [Word8] -> Lit
 stringPrimL = StringPrimL
 rationalL   :: Rational -> Lit
 rationalL   = RationalL
diff --git a/Language/Haskell/TH/Ppr.hs b/Language/Haskell/TH/Ppr.hs
index 53f43ff..d3d5a1a 100644
--- a/Language/Haskell/TH/Ppr.hs
+++ b/Language/Haskell/TH/Ppr.hs
@@ -9,7 +9,8 @@ module Language.Haskell.TH.Ppr where
 import Text.PrettyPrint (render)
 import Language.Haskell.TH.PprLib
 import Language.Haskell.TH.Syntax
-import Data.Char ( toLower )
+import Data.Word ( Word8 )
+import Data.Char ( toLower, chr )
 import GHC.Show  ( showMultiLineString )
 
 nestDepth :: Int
@@ -173,9 +174,12 @@ pprLit i (DoublePrimL x) = parensIf (i > noPrec && x < 0)
 pprLit i (IntegerL x)    = parensIf (i > noPrec && x < 0) (integer x)
 pprLit _ (CharL c)       = text (show c)
 pprLit _ (StringL s)     = pprString s
-pprLit _ (StringPrimL s) = pprString s <> char '#'
+pprLit _ (StringPrimL s) = pprString (bytesToString s) <> char '#'
 pprLit i (RationalL rat) = parensIf (i > noPrec) $ rational rat
 
+bytesToString :: [Word8] -> String
+bytesToString = map (chr . fromIntegral)
+
 pprString :: String -> Doc
 -- Print newlines as newlines with Haskell string escape notation, 
 -- 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/Language/Haskell/TH/Syntax.hs
+++ b/Language/Haskell/TH/Syntax.hs
@@ -65,6 +65,7 @@ import System.IO.Unsafe	( unsafePerformIO )
 import Control.Monad (liftM)
 import System.IO	( hPutStrLn, stderr )
 import Data.Char        ( isAlpha )
+import Data.Word        ( Word8 )
 
 -----------------------------------------------------
 --
@@ -791,7 +792,7 @@ data Lit = CharL Char
          | WordPrimL Integer
          | FloatPrimL Rational
          | DoublePrimL Rational
-         | StringPrimL String	-- ^ A primitive C-style string, type Addr#
+         | StringPrimL [Word8]	-- ^ A primitive C-style string, type Addr#
     deriving( Show, Eq, Data, Typeable )
 
     -- We could add Int, Float, Double etc, as we do in HsLit, 
-- 
1.7.4.4

