Use showMultiLineString from GHC.Show
authorsimonpj@microsoft.com <unknown>
Mon, 25 Oct 2010 15:18:07 +0000 (15:18 +0000)
committersimonpj@microsoft.com <unknown>
Mon, 25 Oct 2010 15:18:07 +0000 (15:18 +0000)
Part of patch for #4436

Language/Haskell/TH/Ppr.hs

index ac1bbf5..d48d027 100644 (file)
@@ -10,6 +10,7 @@ import Text.PrettyPrint.HughesPJ (render)
 import Language.Haskell.TH.PprLib
 import Language.Haskell.TH.Syntax
 import Data.Char ( toLower )
+import GHC.Show  ( showMultiLineString )
 
 nestDepth :: Int
 nestDepth = 4
@@ -172,10 +173,15 @@ pprLit i (DoublePrimL x) = parensIf (i > noPrec && x < 0)
                                     (double (fromRational x) <> text "##")
 pprLit i (IntegerL x)    = parensIf (i > noPrec && x < 0) (integer x)
 pprLit _ (CharL c)       = text (show c)
-pprLit _ (StringL s)     = text (show s)
-pprLit _ (StringPrimL s) = text (show s) <> char '#'
+pprLit _ (StringL s)     = pprString s
+pprLit _ (StringPrimL s) = pprString s <> char '#'
 pprLit i (RationalL rat) = parensIf (i > noPrec) $ rational rat
 
+pprString :: String -> Doc
+-- Print newlines as newlines with Haskell string escape notation, 
+-- not as '\n'.  For other non-printables use regular escape notation.
+pprString s = vcat (map text (showMultiLineString s))
+
 ------------------------------
 instance Ppr Pat where
     ppr = pprPat noPrec