|
|
|
|
|
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 |
|
|
|
|
Type classes
|
|
class Outputable a where |
Class designating that some type has an SDoc representation
| | Methods | | | 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 BreakLocation | 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 | | | Instances | |
|
|
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 |
|
|
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 |
|
|
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 |