Outputable
Contents
Description
This module defines classes and functions for pretty-printing. It also
exports a number of helpful debugging and other utilities such as trace
and panic
.
The interface to this module is very similar to the standard Hughes-PJ pretty printing
module, except that it exports a number of additional functions that are rarely used,
and works over the SDoc
type.
- class Outputable a where
- class Outputable a => OutputableBndr a where
- pprBndr :: BindingSite -> a -> SDoc
- type SDoc = PprStyle -> Doc
- docToSDoc :: Doc -> SDoc
- interppSP :: Outputable a => [a] -> SDoc
- interpp'SP :: Outputable a => [a] -> SDoc
- pprQuotedList :: Outputable a => [a] -> SDoc
- pprWithCommas :: (a -> SDoc) -> [a] -> SDoc
- quotedListWithOr :: [SDoc] -> SDoc
- empty :: SDoc
- nest :: Int -> SDoc -> SDoc
- char :: Char -> SDoc
- text :: String -> SDoc
- ftext :: FastString -> SDoc
- ptext :: LitString -> SDoc
- int :: Int -> SDoc
- integer :: Integer -> SDoc
- float :: Float -> SDoc
- double :: Double -> SDoc
- rational :: Rational -> SDoc
- parens :: SDoc -> SDoc
- cparen :: Bool -> SDoc -> SDoc
- brackets :: SDoc -> SDoc
- braces :: SDoc -> SDoc
- quotes :: SDoc -> SDoc
- doubleQuotes :: SDoc -> SDoc
- angleBrackets :: SDoc -> SDoc
- semi :: SDoc
- comma :: SDoc
- colon :: SDoc
- dcolon :: SDoc
- space :: SDoc
- equals :: SDoc
- dot :: SDoc
- arrow :: SDoc
- darrow :: SDoc
- lparen :: SDoc
- rparen :: SDoc
- lbrack :: SDoc
- rbrack :: SDoc
- lbrace :: SDoc
- rbrace :: SDoc
- underscore :: SDoc
- blankLine :: SDoc
- (<>) :: SDoc -> SDoc -> SDoc
- (<+>) :: SDoc -> SDoc -> SDoc
- hcat :: [SDoc] -> SDoc
- hsep :: [SDoc] -> SDoc
- ($$) :: SDoc -> SDoc -> SDoc
- ($+$) :: SDoc -> SDoc -> SDoc
- vcat :: [SDoc] -> SDoc
- sep :: [SDoc] -> SDoc
- cat :: [SDoc] -> SDoc
- fsep :: [SDoc] -> SDoc
- fcat :: [SDoc] -> SDoc
- hang :: SDoc -> Int -> SDoc -> SDoc
- punctuate :: SDoc -> [SDoc] -> [SDoc]
- ppWhen :: Bool -> SDoc -> SDoc
- ppUnless :: Bool -> SDoc -> SDoc
- speakNth :: Int -> SDoc
- speakNTimes :: Int -> SDoc
- speakN :: Int -> SDoc
- speakNOf :: Int -> SDoc -> SDoc
- plural :: [a] -> SDoc
- printSDoc :: SDoc -> PprStyle -> IO ()
- printErrs :: Doc -> IO ()
- printOutput :: Doc -> IO ()
- hPrintDump :: Handle -> SDoc -> IO ()
- printDump :: SDoc -> IO ()
- printForC :: Handle -> SDoc -> IO ()
- printForAsm :: Handle -> SDoc -> IO ()
- printForUser :: Handle -> PrintUnqualified -> SDoc -> IO ()
- printForUserPartWay :: Handle -> Int -> PrintUnqualified -> SDoc -> IO ()
- pprCode :: CodeStyle -> SDoc -> SDoc
- mkCodeStyle :: CodeStyle -> PprStyle
- showSDoc :: SDoc -> String
- showSDocOneLine :: SDoc -> String
- showSDocForUser :: PrintUnqualified -> SDoc -> String
- showSDocDebug :: SDoc -> String
- showSDocDump :: SDoc -> String
- showSDocDumpOneLine :: SDoc -> String
- showPpr :: Outputable a => a -> String
- showSDocUnqual :: SDoc -> String
- showsPrecSDoc :: Int -> SDoc -> ShowS
- pprInfixVar :: Bool -> SDoc -> SDoc
- pprPrefixVar :: Bool -> SDoc -> SDoc
- pprHsChar :: Char -> SDoc
- pprHsString :: FastString -> SDoc
- pprHsInfix :: Outputable name => name -> SDoc
- pprHsVar :: Outputable name => name -> SDoc
- pprFastFilePath :: FastString -> SDoc
- data BindingSite
- = LambdaBind
- | CaseBind
- | LetBind
- data PprStyle
- data CodeStyle
- type PrintUnqualified = (QueryQualifyName, QueryQualifyModule)
- alwaysQualify :: PrintUnqualified
- neverQualify :: PrintUnqualified
- data QualifyName
- getPprStyle :: (PprStyle -> SDoc) -> SDoc
- withPprStyle :: PprStyle -> SDoc -> SDoc
- withPprStyleDoc :: PprStyle -> SDoc -> Doc
- pprDeeper :: SDoc -> SDoc
- pprDeeperList :: ([SDoc] -> SDoc) -> [SDoc] -> SDoc
- pprSetDepth :: Depth -> SDoc -> SDoc
- codeStyle :: PprStyle -> Bool
- userStyle :: PprStyle -> Bool
- debugStyle :: PprStyle -> Bool
- dumpStyle :: PprStyle -> Bool
- asmStyle :: PprStyle -> Bool
- ifPprDebug :: SDoc -> SDoc
- qualName :: PprStyle -> QueryQualifyName
- qualModule :: PprStyle -> QueryQualifyModule
- mkErrStyle :: PrintUnqualified -> PprStyle
- defaultErrStyle :: PprStyle
- defaultDumpStyle :: PprStyle
- defaultUserStyle :: PprStyle
- mkUserStyle :: PrintUnqualified -> Depth -> PprStyle
- cmdlineParserStyle :: PprStyle
- data Depth
- pprPanic :: String -> SDoc -> a
- assertPprPanic :: String -> Int -> SDoc -> a
- pprPanicFastInt :: String -> SDoc -> FastInt
- pprPgmError :: String -> SDoc -> a
- pprTrace :: String -> SDoc -> a -> a
- warnPprTrace :: Bool -> String -> Int -> SDoc -> a -> a
- trace :: String -> a -> a
- pgmError :: String -> a
- panic :: String -> a
- panicFastInt :: String -> FastInt
- assertPanic :: String -> Int -> a
Type classes
class Outputable a where
Class designating that some type has an SDoc
representation
Instances
class Outputable a => OutputableBndr a where
When we print a binder, we often want to print its type too.
The OutputableBndr
class encapsulates this idea.
Methods
pprBndr :: BindingSite -> a -> SDoc
Instances
OutputableBndr Name | |
OutputableBndr Var | |
OutputableBndr RdrName | |
Outputable name => OutputableBndr (IPName name) | |
Outputable b => OutputableBndr (TaggedBndr b) |
Pretty printing combinators
interppSP :: Outputable a => [a] -> SDoc
Returns the seperated concatenation of the pretty printed things.
interpp'SP :: Outputable a => [a] -> SDoc
Returns the comma-seperated concatenation of the pretty printed things.
pprQuotedList :: Outputable a => [a] -> SDoc
Returns the comma-seperated concatenation of the quoted pretty printed things.
[x,y,z] ==> `x', `y', `z'
quotedListWithOr :: [SDoc] -> SDoc
ftext :: FastString -> SDoc
doubleQuotes :: SDoc -> SDoc
angleBrackets :: SDoc -> SDoc
underscore :: SDoc
A paragraph-fill combinator. It's much like sep, only it keeps fitting things on one line until it can't fit any more.
Converts an integer to a verbal index:
speakNth 1 = text "first" speakNth 5 = text "fifth" speakNth 21 = text "21st"
speakNTimes :: Int -> SDoc
Converts a strictly positive integer into a number of times:
speakNTimes 1 = text "once" speakNTimes 2 = text "twice" speakNTimes 4 = text "4 times"
Converts an integer to a verbal multiplicity:
speakN 0 = text "none" speakN 5 = text "five" speakN 10 = text "10"
speakNOf :: Int -> SDoc -> SDoc
Converts an integer and object description to a statement about the multiplicity of those objects:
speakNOf 0 (text "melon") = text "no melons" speakNOf 1 (text "melon") = text "one melon" speakNOf 3 (text "melon") = text "three melons"
Determines the pluralisation suffix appropriate for the length of a list:
plural [] = char 's' plural ["Hello"] = empty plural ["Hello", "World"] = char 's'
Converting SDoc
into strings and outputing it
printOutput :: Doc -> IO ()
hPrintDump :: Handle -> SDoc -> IO ()
printForAsm :: Handle -> SDoc -> IO ()
printForUser :: Handle -> PrintUnqualified -> SDoc -> IO ()
printForUserPartWay :: Handle -> Int -> PrintUnqualified -> SDoc -> IO ()
mkCodeStyle :: CodeStyle -> PprStyle
showSDocOneLine :: SDoc -> String
showSDocForUser :: PrintUnqualified -> SDoc -> String
showSDocDebug :: SDoc -> String
showSDocDump :: SDoc -> String
showSDocDumpOneLine :: SDoc -> String
showPpr :: Outputable a => a -> String
showSDocUnqual :: SDoc -> String
showsPrecSDoc :: Int -> SDoc -> ShowS
pprInfixVar :: Bool -> SDoc -> SDoc
pprPrefixVar :: Bool -> SDoc -> SDoc
pprHsString :: FastString -> SDoc
Special combinator for showing string literals.
pprHsInfix :: Outputable name => name -> SDoc
pprHsVar :: Outputable name => name -> SDoc
pprFastFilePath :: FastString -> SDoc
Controlling the style in which output is printed
data BindingSite
BindingSite
is used to tell the thing that prints binder what
language construct is binding the identifier. This can be used
to decide how much info to print.
Constructors
LambdaBind | |
CaseBind | |
LetBind |
data PprStyle
type PrintUnqualified = (QueryQualifyName, QueryQualifyModule)
data QualifyName
Constructors
NameUnqual | |
NameQual ModuleName | |
NameNotInScope1 | |
NameNotInScope2 |
getPprStyle :: (PprStyle -> SDoc) -> SDoc
withPprStyle :: PprStyle -> SDoc -> SDoc
withPprStyleDoc :: PprStyle -> SDoc -> Doc
pprDeeperList :: ([SDoc] -> SDoc) -> [SDoc] -> SDoc
pprSetDepth :: Depth -> SDoc -> SDoc
debugStyle :: PprStyle -> Bool
ifPprDebug :: SDoc -> SDoc
qualModule :: PprStyle -> QueryQualifyModule
mkErrStyle :: PrintUnqualified -> PprStyle
Style for printing error messages
mkUserStyle :: PrintUnqualified -> Depth -> PprStyle
Error handling and debugging utilities
pprPanic :: String -> SDoc -> a
Throw an exception saying bug in GHC
assertPprPanic :: String -> Int -> SDoc -> a
Panic with an assertation failure, recording the given file and line number. Should typically be accessed with the ASSERT family of macros
pprPanicFastInt :: String -> SDoc -> FastInt
Specialization of pprPanic that can be safely used with FastInt
pprPgmError :: String -> SDoc -> a
Throw an exception saying bug in pgm being compiled (used for unusual program errors)
warnPprTrace :: Bool -> String -> Int -> SDoc -> a -> a
Just warn about an assertion failure, recording the given file and line number. Should typically be accessed with the WARN macros
trace :: String -> a -> aSource
When called, trace
outputs the string in its first argument, before
returning the second argument as its result. The trace
function is not
referentially transparent, and should only be used for debugging, or for
monitoring execution. Some implementations of trace
may decorate the string
that's output to indicate that you're tracing. The function is implemented on
top of putTraceMsg
.
panicFastInt :: String -> FastInt
assertPanic :: String -> Int -> a