| ghc-6.10.4: The GHC API | Contents | Index

Outputable

Contents

Type classes
Pretty printing combinators
Converting `SDoc` into strings and outputing it
Controlling the style in which output is printed
Error handling and debugging utilities

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.
Synopsis

class Outputable a where

ppr :: a -> SDoc

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
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
lparen :: SDoc
rparen :: SDoc
lbrack :: SDoc
rbrack :: SDoc
lbrace :: SDoc
rbrace :: SDoc
underscore :: 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]
speakNth :: Int -> SDoc
speakNTimes :: Int -> SDoc
speakN :: Int -> SDoc
speakNOf :: Int -> SDoc -> SDoc
plural :: [a] -> SDoc
printSDoc :: SDoc -> PprStyle -> IO ()
printErrs :: 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
showSDocForUser :: PrintUnqualified -> SDoc -> String
showSDocDebug :: SDoc -> String
showSDocDump :: SDoc -> 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

= CStyle
| AsmStyle

type PrintUnqualified = (QueryQualifyName, QueryQualifyModule)
alwaysQualify :: PrintUnqualified
neverQualify :: PrintUnqualified

data QualifyName

= NameUnqual
| NameQual ModuleName
| NameNotInScope1
| NameNotInScope2

getPprStyle :: (PprStyle -> SDoc) -> SDoc
withPprStyle :: PprStyle -> SDoc -> SDoc
withPprStyleDoc :: PprStyle -> SDoc -> Doc
pprDeeper :: SDoc -> SDoc
pprDeeperList :: ([SDoc] -> SDoc) -> [SDoc] -> SDoc
pprSetDepth :: Int -> 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

data Depth

= AllTheWay
| PartWay Int

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
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
Methods

ppr :: a -> SDoc

Instances

Outputable Bool
Outputable Char
Outputable Int
Outputable Word32
Outputable ()
Outputable GlobalIdDetails
Outputable PackageId
Outputable ModuleName
Outputable Module
Outputable OccName
Outputable FastString
Outputable InlineSpec
Outputable Activation
Outputable SuccessFlag
Outputable StrictnessMark
Outputable OccInfo
Outputable OverlapFlag
Outputable RecFlag
Outputable TopLevelFlag
Outputable FixityDirection
Outputable Fixity
Outputable WarningTxt
Outputable FunctionOrData
Outputable Unique
Outputable SrcSpan
Outputable SrcLoc
Outputable MachHint
Outputable MachRep
Outputable SlotSet
Outputable StackPlacement
Outputable SlotClass
Outputable MetaDetails
Outputable Fingerprint
Outputable BlockId
Outputable TyThing
Outputable PredType
Outputable Type
Outputable TyCon
Outputable Name
Outputable ModLocation
Outputable DNCallSpec
Outputable CCallConv
Outputable CCallSpec
Outputable CExportSpec
Outputable Safety
Outputable ForeignCall
Outputable DataCon
Outputable ImportSpec
Outputable Parent
Outputable GlobalRdrElt
Outputable RdrName
Outputable GhcMode
Outputable Var
Outputable InScopeSet
Outputable StrictSig
Outputable DmdResult
Outputable DmdType
Outputable Demands
Outputable Demand
Outputable StableLoc
Outputable VolatileLoc
Outputable CgIdInfo
Outputable CostCentre
Outputable CostCentreStack
Outputable DefMeth
Outputable Class
Outputable PrimRep
Outputable TvSubst
Outputable HsBang
Outputable OverLitVal
Outputable HsLit
Outputable Literal
Outputable UnfoldingGuidance
Outputable Unfolding
Outputable CoreRule
Outputable AltCon
Outputable PrimOp
Outputable TickBoxOp
Outputable LBVarInfo
Outputable CLabel
Outputable GlobalReg
Outputable LocalReg
Outputable CmmLit
Outputable Area
Outputable CmmReg
Outputable CmmExpr
Outputable Refinement
Outputable CgRep
Outputable HsWrapper
Outputable FoType
Outputable ForeignExport
Outputable ForeignImport
Outputable NewOrData
Outputable IfaceTyCon
Outputable IfacePredType
Outputable IfaceType
Outputable IfaceBndr
Outputable IfaceConAlt
Outputable IfaceNote
Outputable IfaceExpr
Outputable IfaceInfoItem
Outputable IfaceIdInfo
Outputable IfaceRule
Outputable IfaceFamInst
Outputable IfaceInst
Outputable IfaceClassOp
Outputable IfaceDecl
Outputable UpdateFlag
Outputable AltType
Outputable C_SRT
Outputable CmmStatic
Outputable CmmSafety
Outputable CmmStmt
Outputable CmmInfo
Outputable Convention
Outputable Last
Outputable Middle
Outputable Placement
Outputable Protocol
Outputable Status
Outputable AvailRegs
Outputable DualLive
Outputable Reg
Outputable RegClass
Outputable Instr
Outputable LiveInfo
Outputable LiveInstr
Outputable Loc
Outputable SpillStats
Outputable Store
Outputable RegAllocStats
Outputable BreakInfo
Outputable BCInstr
Outputable UnlinkedBCO
Outputable CompiledByteCode
Outputable FloatingBind
Outputable Subst
Outputable CallCtxt
Outputable Level
Outputable ArgOcc
Outputable HowBound
Outputable Value
Outputable Instance
Outputable FamInst
Outputable Unlinked
Outputable Linkable
Outputable ModSummary
Outputable FixItem
Outputable Warnings
Outputable CoreModule
Outputable TargetId
Outputable Target
Outputable Discr
Outputable TickInfo
Outputable Tick
Outputable FloatFlag
Outputable Floats
Outputable SimplSR
Outputable DupFlag
Outputable SimplCont
Outputable CallKey
Outputable UsageDetails
Outputable InstOrigin
Outputable Inst
Outputable WhereFrom
Outputable RefinementVisibility
Outputable TcTyThing
Outputable ThStage
Outputable EquationInfo
Outputable RewriteInst
Outputable EqConfig
Outputable AvailHow
Outputable Avails
Outputable Outer
Outputable ClosureType
Outputable Term
Outputable TcSigInfo
Outputable a => Outputable ([] a)
Outputable a => Outputable (Maybe a)
Outputable name => Outputable (IPName name)
Outputable e => Outputable (Located e)
OutputableBndr name => Outputable (Pat name)
OutputableBndr id => Outputable (HsQuasiQuote id)
Outputable (HsDoc a)
OutputableBndr id => Outputable (HsSplice id)
OutputableBndr id => Outputable (HsExpr id)
Outputable a => Outputable (UniqFM a)
Outputable a => Outputable (UniqFM a)
Outputable a => Outputable (Lazy a)
Outputable a => Outputable (Bag a)
Outputable a => Outputable (SCC a)
Outputable node => Outputable (Edge node)
Outputable node => Outputable (Graph node)
Outputable a => Outputable (OccEnv a)
Outputable name => Outputable (IE name)
Outputable name => Outputable (ImportDecl name)
Outputable a => Outputable (NameEnv a)
Outputable name => Outputable (HsTyVarBndr name)
OutputableBndr name => Outputable (HsType name)
OutputableBndr name => Outputable (HsPred name)
OutputableBndr id => Outputable (HsOverLit id)
Outputable b => Outputable (TaggedBndr b)
OutputableBndr b => Outputable (Bind b)
OutputableBndr b => Outputable (Expr b)
Outputable l => Outputable (ZLast l)
Outputable name => Outputable (FixitySig name)
OutputableBndr name => Outputable (Sig name)
OutputableBndr id => Outputable (IPBind id)
OutputableBndr id => Outputable (HsIPBinds id)
OutputableBndr name => Outputable (WarnDecl name)
Outputable (DocDecl name)
OutputableBndr name => Outputable (RuleBndr name)
OutputableBndr name => Outputable (RuleDecl name)
OutputableBndr name => Outputable (ForeignDecl name)
OutputableBndr name => Outputable (DefaultDecl name)
OutputableBndr name => Outputable (DerivDecl name)
OutputableBndr name => Outputable (InstDecl name)
OutputableBndr name => Outputable (ConDecl name)
OutputableBndr name => Outputable (TyClDecl name)
OutputableBndr name => Outputable (SpliceDecl name)
OutputableBndr name => Outputable (HsGroup name)
OutputableBndr name => Outputable (HsDecl name)
OutputableBndr id => Outputable (ArithSeqInfo id)
OutputableBndr id => Outputable (HsBracket id)
OutputableBndr id => Outputable (HsCmdTop id)
OutputableBndr name => Outputable (HsModule name)
Outputable bdee => Outputable (GenStgArg bdee)
Outputable a => Outputable (CmmKinded a)
Outputable instr => Outputable (GenBasicBlock instr)
Outputable instr => Outputable (ListGraph instr)
Outputable m => Outputable (ExtendWithSpills m)
Outputable a => Outputable (ProtoBCO a)
Outputable n => Outputable (GenAvailInfo n)
(Outputable a, Outputable b) => Outputable (Either a b)
(Outputable a, Outputable b) => Outputable ((,) a b)
(Outputable key, Outputable elt) => Outputable (FiniteMap key elt)
(Outputable m, Outputable l, LastNode l) => Outputable (LGraph m l)
(Outputable m, Outputable l, LastNode l) => Outputable (Graph m l)
(Outputable m, Outputable l, LastNode l) => Outputable (Block m l)
(Outputable m, Outputable l) => Outputable (ZTail m l)
(OutputableBndr idL, OutputableBndr idR) => Outputable (HsBindLR idL idR)
(OutputableBndr idL, OutputableBndr idR) => Outputable (HsValBindsLR idL idR)
(OutputableBndr idL, OutputableBndr idR) => Outputable (HsLocalBindsLR idL idR)
(OutputableBndr id, Outputable arg) => Outputable (HsRecField id arg)
(OutputableBndr id, Outputable arg) => Outputable (HsRecFields id arg)
(OutputableBndr idL, OutputableBndr idR) => Outputable (StmtLR idL idR)
(Outputable bndr, Outputable bdee, Ord bdee) => Outputable (GenStgRhs bndr bdee)
(Outputable bndr, Outputable bdee, Ord bdee) => Outputable (GenStgExpr bndr bdee)
(Outputable bndr, Outputable bdee, Ord bdee) => Outputable (GenStgBinding bndr bdee)
(Outputable a, Outputable b, Outputable c) => Outputable ((,,) a b c)
(Outputable d, Outputable info, Outputable i) => Outputable (GenCmmTop d info i)
(Outputable d, Outputable info, Outputable g) => Outputable (GenCmm d info g)
(Outputable a, Outputable b, Outputable c, Outputable d) => Outputable ((,,,) a b c d)
(Outputable a, Outputable b, Outputable c, Outputable d, Outputable e) => Outputable ((,,,,) a b c d e)

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 RdrName
OutputableBndr Var
Outputable name => OutputableBndr (IPName name)
Outputable b => OutputableBndr (TaggedBndr b)

Pretty printing combinators
type SDoc = PprStyle -> Doc
docToSDoc :: Doc -> SDoc
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'

pprWithCommas

:: |
=> a -> SDoc | The pretty printing function to use
-> [a] | The things to be pretty printed
-> SDoc | `SDoc` where the things have been pretty printed, comma-separated and finally packed into a paragraph.

empty :: SDoc
nest :: Int -> SDoc -> SDoc
Indent `SDoc` some specified amount
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
lparen :: SDoc
rparen :: SDoc
lbrack :: SDoc
rbrack :: SDoc
lbrace :: SDoc
rbrace :: SDoc
underscore :: SDoc
(<>) :: SDoc -> SDoc -> SDoc
Join two `SDoc` together horizontally without a gap
(<+>) :: SDoc -> SDoc -> SDoc
Join two `SDoc` together horizontally with a gap between them
hcat :: [SDoc] -> SDoc
Concatenate `SDoc` horizontally
hsep :: [SDoc] -> SDoc
Concatenate `SDoc` horizontally with a space between each one
($$) :: SDoc -> SDoc -> SDoc
Join two `SDoc` together vertically; if there is no vertical overlap it dovetails the two onto one line
($+$) :: SDoc -> SDoc -> SDoc
Join two `SDoc` together vertically
vcat :: [SDoc] -> SDoc
Concatenate `SDoc` vertically with dovetailing
sep :: [SDoc] -> SDoc
Separate: is either like `hsep` or like `vcat`, depending on what fits
cat :: [SDoc] -> SDoc
Catenate: is either like `hcat` or like `vcat`, depending on what fits
fsep :: [SDoc] -> 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.
fcat :: [SDoc] -> SDoc
This behaves like `fsep`, but it uses `<>` for horizontal conposition rather than `<+>`
hang

:: SDoc | The header
-> Int | Amount to indent the hung body
-> SDoc | The hung body, indented and placed below the header
-> SDoc |

punctuate

:: SDoc | The punctuation
-> [SDoc] | The list that will have punctuation added between every adjacent pair of elements
-> [SDoc] | Punctuated list

speakNth :: Int -> SDoc

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"

speakN :: Int -> SDoc

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"

plural :: [a] -> SDoc

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
printSDoc :: SDoc -> PprStyle -> IO ()
printErrs :: 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
showSDocForUser :: PrintUnqualified -> SDoc -> String
showSDocDebug :: SDoc -> String
showSDocDump :: SDoc -> String
showSDocUnqual :: SDoc -> String
showsPrecSDoc :: Int -> SDoc -> ShowS
pprInfixVar :: Bool -> SDoc -> SDoc
pprPrefixVar :: Bool -> SDoc -> SDoc
pprHsChar :: Char -> SDoc
Special combinator for showing character literals.
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
data CodeStyle

Constructors

CStyle |
AsmStyle |

type PrintUnqualified = (QueryQualifyName, QueryQualifyModule)
alwaysQualify :: PrintUnqualified
neverQualify :: PrintUnqualified
data QualifyName

Constructors

NameUnqual |
NameQual ModuleName |
NameNotInScope1 |
NameNotInScope2 |

getPprStyle :: (PprStyle -> SDoc) -> SDoc
withPprStyle :: PprStyle -> SDoc -> SDoc
withPprStyleDoc :: PprStyle -> SDoc -> Doc
pprDeeper :: SDoc -> SDoc
pprDeeperList :: ([SDoc] -> SDoc) -> [SDoc] -> SDoc
pprSetDepth :: Int -> 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
Style for printing error messages
defaultErrStyle :: PprStyle
defaultDumpStyle :: PprStyle
defaultUserStyle :: PprStyle
mkUserStyle :: PrintUnqualified -> Depth -> PprStyle
data Depth

Constructors

AllTheWay |
PartWay Int |

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)
pprTrace :: String -> SDoc -> a -> a
If debug output is on, show some `SDoc` on the screen
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
pgmError :: String -> a
panic :: String -> a
panicFastInt :: String -> FastInt
assertPanic :: String -> Int -> a
Produced by Haddock version 2.4.2