ghc-7.6.3: The GHC API

Safe Haskell | None

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
  - pprPrec :: Rational -> a -> SDoc
- class Outputable a => OutputableBndr a where
  - pprBndr :: BindingSite -> a -> SDoc
  - pprPrefixOcc, pprInfixOcc :: a -> SDoc
- data SDoc
- runSDoc :: SDoc -> SDocContext -> Doc
- initSDocContext :: DynFlags -> PprStyle -> SDocContext
- 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
- intWithCommas :: Integral a => a -> 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
- quote :: SDoc -> SDoc
- doubleQuotes :: SDoc -> SDoc
- angleBrackets :: SDoc -> SDoc
- paBrackets :: 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
- coloured :: PprColour -> SDoc -> SDoc
- data PprColour
- colType :: PprColour
- colCoerc :: PprColour
- colDataCon :: PprColour
- colBinder :: PprColour
- bold :: SDoc -> SDoc
- keyword :: SDoc -> SDoc
- printForC :: DynFlags -> Handle -> SDoc -> IO ()
- printForAsm :: DynFlags -> Handle -> SDoc -> IO ()
- printForUser :: DynFlags -> Handle -> PrintUnqualified -> SDoc -> IO ()
- printForUserPartWay :: DynFlags -> Handle -> Int -> PrintUnqualified -> SDoc -> IO ()
- pprCode :: CodeStyle -> SDoc -> SDoc
- mkCodeStyle :: CodeStyle -> PprStyle
- showSDoc :: DynFlags -> SDoc -> String
- showSDocOneLine :: DynFlags -> SDoc -> String
- showSDocForUser :: DynFlags -> PrintUnqualified -> SDoc -> String
- showSDocDebug :: DynFlags -> SDoc -> String
- showSDocDump :: DynFlags -> SDoc -> String
- showSDocDumpOneLine :: DynFlags -> SDoc -> String
- showPpr :: Outputable a => DynFlags -> a -> String
- showSDocUnqual :: DynFlags -> SDoc -> String
- renderWithStyle :: DynFlags -> SDoc -> PprStyle -> String
- pprInfixVar :: Bool -> SDoc -> SDoc
- pprPrefixVar :: Bool -> SDoc -> SDoc
- pprHsChar :: Char -> SDoc
- pprHsString :: FastString -> 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
- sdocWithDynFlags :: (DynFlags -> SDoc) -> SDoc
- sdocWithPlatform :: (Platform -> SDoc) -> SDoc
- getPprStyle :: (PprStyle -> SDoc) -> SDoc
- withPprStyle :: PprStyle -> SDoc -> SDoc
- withPprStyleDoc :: DynFlags -> 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 :: DynFlags -> PrintUnqualified -> PprStyle
- defaultErrStyle :: DynFlags -> PprStyle
- defaultDumpStyle :: PprStyle
- defaultUserStyle :: PprStyle
- mkUserStyle :: PrintUnqualified -> Depth -> PprStyle
- cmdlineParserStyle :: PprStyle
- data Depth
  - = AllTheWay
  - | PartWay Int
- pprPanic :: String -> SDoc -> a
- pprSorry :: String -> SDoc -> a
- assertPprPanic :: String -> Int -> SDoc -> a
- pprPanicFastInt :: String -> SDoc -> FastInt
- pprPgmError :: String -> SDoc -> a
- pprTrace :: String -> SDoc -> a -> a
- pprDefiniteTrace :: DynFlags -> String -> SDoc -> a -> a
- warnPprTrace :: Bool -> String -> Int -> SDoc -> a -> a
- trace :: String -> a -> a
- pgmError :: String -> a
- panic :: String -> a
- sorry :: String -> a
- panicFastInt :: String -> FastInt
- assertPanic :: String -> Int -> a
- pprDebugAndThen :: DynFlags -> (String -> a) -> String -> SDoc -> a

# Type classes

class Outputable a where

Class designating that some type has an `SDoc` representation

Methods

ppr :: a -> SDoc

pprPrec :: Rational -> a -> SDoc

Instances

Outputable Bool |
Outputable Char |
Outputable Int |
Outputable Word |
Outputable Word16 |
Outputable Word32 |
Outputable () |
Outputable Fingerprint |
Outputable PrimOp |
Outputable PackageId |
Outputable ModuleName |
Outputable Module |
Outputable FastString |
Outputable Name |
Outputable TyThing |
Outputable Type |
Outputable MetaDetails |
Outputable SrcSpan |
Outputable RealSrcSpan |
Outputable SrcLoc |
Outputable RealSrcLoc |
Outputable FractionalLit |
Outputable InlineSpec |
Outputable InlinePragma |
Outputable RuleMatchInfo |
Outputable Activation |
Outputable CompilerPhase |
Outputable SuccessFlag |
Outputable DefMethSpec |
Outputable StrictnessMark |
Outputable HsBang |
Outputable OccInfo |
Outputable OverlapFlag |
Outputable RecFlag |
Outputable TopLevelFlag |
Outputable FixityDirection |
Outputable Fixity |
Outputable WarningTxt |
Outputable FunctionOrData |
Outputable Unique |
Outputable IdDetails |
Outputable ArgDescr |
Outputable ClosureTypeInfo |
Outputable SMRep |
Outputable Phase |
Outputable OccName |
Outputable ModLocation |
Outputable Var |
Outputable TyCon |
Outputable DefMeth |
Outputable Class |
Outputable DataCon |
Outputable CostCentreStack |
Outputable CostCentre |
Outputable ImportSpec |
Outputable Parent |
Outputable GlobalRdrElt |
Outputable RdrName |
Outputable CType |
Outputable Header |
Outputable CCallConv |
Outputable CCallSpec |
Outputable CExportSpec |
Outputable Safety |
Outputable ForeignCall |
Outputable PrimRep |
Outputable CoAxiom |
Outputable TyConParent |
Outputable Serialized |
Outputable Annotation |
Outputable InScopeSet |
Outputable TvSubst |
Outputable Literal |
Outputable StableLoc |
Outputable VolatileLoc |
Outputable CgIdInfo |
Outputable StrictSig |
Outputable DmdResult |
Outputable DmdType |
Outputable Demands |
Outputable Demand |
Outputable AvailInfo |
Outputable Width |
Outputable CmmType |
Outputable OverLitVal |
Outputable HsLit |
Outputable HsDocString |
Outputable HsTyLit |
Outputable HsIPName |
Outputable RegClass |
Outputable Reg | Print a reg in a generic manner If you want the architecture specific names, then use the pprReg function from the appropriate Ppr module.
Outputable RealReg |
Outputable VirtualReg |
Outputable GhcMode |
Outputable SafeHaskellMode |
Outputable CvSubst |
Outputable Coercion |
Outputable UnfoldingGuidance |
Outputable UnfoldingSource |
Outputable Unfolding |
Outputable CoreVect |
Outputable CoreRule |
Outputable AltCon |
Outputable TickBoxOp |
Outputable LBVarInfo |
Outputable CafInfo |
Outputable ClsInst |
Outputable FamInst |
Outputable PrimCall |
Outputable IfaceCoCon |
Outputable IfaceTyCon |
Outputable IfaceTyLit |
Outputable IfaceType |
Outputable IfaceBndr |
Outputable FDEq |
Outputable CoreStats |
Outputable EvLit |
Outputable EvTerm |
Outputable EvBind |
Outputable EvBindsVar |
Outputable TcEvBinds |
Outputable HsWrapper |
Outputable TcCoercion |
Outputable TcSpecPrag |
Outputable DocDecl |
Outputable ForeignExport |
Outputable ForeignImport |
Outputable NewOrData |
Outputable IfaceConAlt |
Outputable IfaceExpr |
Outputable IfaceUnfolding |
Outputable IfaceInfoItem |
Outputable IfaceIdInfo |
Outputable IfaceIdDetails |
Outputable IfaceRule |
Outputable IfaceFamInst |
Outputable IfaceClsInst |
Outputable IfaceATDefault |
Outputable IfaceAT |
Outputable IfaceClassOp |
Outputable IfaceDecl |
Outputable Subst |
Outputable ArgSummary |
Outputable CallCtxt |
Outputable ForeignLabelSource |
Outputable CLabel |
Outputable BlockSet |
Outputable BlockId |
Outputable GlobalReg |
Outputable LocalReg |
Outputable CmmLit |
Outputable Area |
Outputable CmmReg |
Outputable CmmExpr |
Outputable ForeignHint |
Outputable ForeignTarget |
Outputable ForeignConvention |
Outputable Convention |
Outputable CmmStatics |
Outputable CmmStatic |
Outputable C_SRT |
Outputable CmmInfoTable |
Outputable CmmStackInfo |
Outputable CmmTopInfo |
Outputable CmmGraph |
Outputable ParamLocation |
Outputable UpdateFlag |
Outputable AltType |
Outputable CgRep |
Outputable CmmSafety |
Outputable CmmStmt |
Outputable Status |
Outputable BreakInfo |
Outputable BCInstr |
Outputable UnlinkedBCO |
Outputable CompiledByteCode |
Outputable Unlinked |
Outputable Linkable |
Outputable IfaceTrustInfo |
Outputable VectInfo |
Outputable ModSummary |
Outputable FixItem |
Outputable Warnings |
Outputable InteractiveImport |
Outputable TargetId |
Outputable Target |
Outputable FloatBind |
Outputable EqOrigin |
Outputable CtOrigin |
Outputable SkolemInfo |
Outputable CtEvidence |
Outputable Implication |
Outputable Untouchables |
Outputable WantedConstraints |
Outputable Ct |
Outputable WhereFrom |
Outputable PromotionErr |
Outputable TcTyThing |
Outputable ThStage |
Outputable TcTyVarBind |
Outputable CgLoc |
Outputable CgIdInfo |
Outputable TopSRT |
Outputable EquationInfo |
Outputable CompRepr |
Outputable ProdRepr |
Outputable ConRepr |
Outputable SumRepr |
Outputable MetaTyCons |
Outputable ExpKind |
Outputable TcSigInfo |
Outputable InertSet |
Outputable InertCans |
Outputable WorkList |
Outputable StopOrContinue |
Outputable Tick |
Outputable FloatOutSwitches |
Outputable SimplifierMode |
Outputable CoreToDo |
Outputable FloatSpec |
Outputable Level |
Outputable Floats |
Outputable SimplSR |
Outputable DupFlag |
Outputable SimplCont |
Outputable ClosureType |
Outputable Term |
Outputable LiveInfo |
Outputable SpillStats |
Outputable Instr |
Outputable Instr |
Outputable Instr |
Outputable Loc |
Outputable CoreModule |
Outputable a => Outputable [a] |
Outputable a => Outputable (Maybe a) |
Outputable elt => Outputable (IntMap elt) |
Outputable a => Outputable (Set a) |
OutputableBndr name => Outputable (Pat name) |
Outputable a => Outputable (Bag a) |
Outputable a => Outputable (Pair a) |
Outputable a => Outputable (UniqFM a) |
Outputable a => Outputable (OccEnv a) |
Outputable name => Outputable (AnnTarget name) |
Outputable a => Outputable (SCC a) |
Outputable node => Outputable (Graph node) |
OutputableBndr id => Outputable (HsSplice id) |
OutputableBndr id => Outputable (HsExpr id) |
OutputableBndr id => Outputable (HsOverLit id) |
OutputableBndr name => Outputable (HsType name) |
OutputableBndr name => Outputable (HsTyVarBndr name) |
Outputable thing => Outputable (HsWithBndrs thing) |
OutputableBndr name => Outputable (LHsTyVarBndrs name) |
OutputableBndr id => Outputable (HsQuasiQuote id) |
(HasOccName name, OutputableBndr name) => Outputable (IE name) |
(OutputableBndr name, HasOccName name) => Outputable (ImportDecl name) |
Outputable b => Outputable (TaggedBndr b) |
Outputable e => Outputable (DFunArg e) |
Outputable id => Outputable (Tickish id) |
OutputableBndr b => Outputable (Bind b) |
OutputableBndr b => Outputable (Expr b) |
Outputable a => Outputable (TypeMap a) |
Outputable a => Outputable (CoreMap a) |
Outputable name => Outputable (FixitySig name) |
OutputableBndr name => Outputable (Sig name) |
OutputableBndr id => Outputable (IPBind id) |
OutputableBndr id => Outputable (HsIPBinds id) |
OutputableBndr id => Outputable (ABExport id) |
OutputableBndr name => Outputable (AnnDecl name) |
OutputableBndr name => Outputable (WarnDecl name) |
OutputableBndr name => Outputable (VectDecl 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 (FamInstDecl name) |
Outputable ty => Outputable (ResType ty) |
OutputableBndr name => Outputable (ConDecl name) |
OutputableBndr name => Outputable (HsTyDefn 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, HasOccName name) => Outputable (HsModule name) |
Outputable a => Outputable (BlockEnv a) |
Outputable bdee => Outputable (GenStgArg bdee) |
Outputable a => Outputable (CmmHinted a) |
Outputable instr => Outputable (GenBasicBlock instr) |
Outputable instr => Outputable (ListGraph instr) |
Outputable a => Outputable (ProtoBCO a) |
Outputable a => Outputable (NonVoid a) |
Outputable a => Outputable (FamHeadMap a) |
Outputable a => Outputable (PredMap a) |
Outputable instr => Outputable (LiveInstr instr) |
Outputable instr => Outputable (InstrSR instr) |
(Outputable a, Outputable b) => Outputable (Either a b) |
(Outputable a, Outputable b) => Outputable (a, b) |
(Outputable key, Outputable elt) => Outputable (Map key elt) |
(Outputable l, Outputable e) => Outputable (GenLocated l e) |
(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 (ParStmtBlock idL idR) |
(OutputableBndr idL, OutputableBndr idR) => Outputable (StmtLR idL idR) |
Outputable (CmmNode e x) |
(OutputableBndr bndr, Outputable bdee, Ord bdee) => Outputable (GenStgRhs bndr bdee) |
(OutputableBndr bndr, Outputable bdee, Ord bdee) => Outputable (GenStgExpr bndr bdee) |
(OutputableBndr bndr, Outputable bdee, Ord bdee) => Outputable (GenStgBinding bndr bdee) |
(Outputable statics, Outputable instr) => Outputable (RegAllocStats statics instr) |
(Outputable a, Outputable b, Outputable c) => Outputable (a, b, c) |
Outputable (Graph CmmNode e x) |
Outputable (Block CmmNode O O) |
Outputable (Block CmmNode O C) |
Outputable (Block CmmNode C O) |
Outputable (Block CmmNode C C) |
(Outputable d, Outputable info, Outputable i) => Outputable (GenCmmDecl d info i) |
(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) |
(Outputable a, Outputable b, Outputable c, Outputable d, Outputable e, Outputable f) => Outputable (a, b, c, d, e, f) |
(Outputable a, Outputable b, Outputable c, Outputable d, Outputable e, Outputable f, Outputable g) => Outputable (a, b, c, d, e, f, g) |

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

pprPrefixOcc, pprInfixOcc :: a -> SDoc

Instances

OutputableBndr Name |
OutputableBndr Var |
OutputableBndr RdrName |
OutputableBndr HsIPName |
Outputable b => OutputableBndr (TaggedBndr b) |

# Pretty printing combinators

data SDoc

runSDoc :: SDoc -> SDocContext -> Doc

initSDocContext :: DynFlags -> PprStyle -> SDocContext

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

Arguments

:: (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.

quotedListWithOr :: [SDoc] -> SDoc

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

intWithCommas :: Integral a => a -> 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

quote :: SDoc -> SDoc

doubleQuotes :: SDoc -> SDoc

angleBrackets :: SDoc -> SDoc

paBrackets :: 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

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

Arguments

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

punctuate

Arguments

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

ppWhen :: Bool -> SDoc -> SDoc

ppUnless :: Bool -> SDoc -> SDoc

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'

coloured :: PprColour -> SDoc -> SDoc

Apply the given colour/style for the argument.

Only takes effect if colours are enabled.

data PprColour

A colour/style for use with `coloured`.

colType :: PprColour

colCoerc :: PprColour

colDataCon :: PprColour

colBinder :: PprColour

bold :: SDoc -> SDoc

keyword :: SDoc -> SDoc

# Converting `SDoc` into strings and outputing it

printForC :: DynFlags -> Handle -> SDoc -> IO ()

printForAsm :: DynFlags -> Handle -> SDoc -> IO ()

printForUser :: DynFlags -> Handle -> PrintUnqualified -> SDoc -> IO ()

printForUserPartWay :: DynFlags -> Handle -> Int -> PrintUnqualified -> SDoc -> IO ()

pprCode :: CodeStyle -> SDoc -> SDoc

mkCodeStyle :: CodeStyle -> PprStyle

showSDoc :: DynFlags -> SDoc -> String

showSDocOneLine :: DynFlags -> SDoc -> String

showSDocForUser :: DynFlags -> PrintUnqualified -> SDoc -> String

showSDocDebug :: DynFlags -> SDoc -> String

showSDocDump :: DynFlags -> SDoc -> String

showSDocDumpOneLine :: DynFlags -> SDoc -> String

showPpr :: Outputable a => DynFlags -> a -> String

showSDocUnqual :: DynFlags -> SDoc -> String

renderWithStyle :: DynFlags -> SDoc -> PprStyle -> String

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.

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 |

sdocWithDynFlags :: (DynFlags -> SDoc) -> SDoc

sdocWithPlatform :: (Platform -> SDoc) -> SDoc

getPprStyle :: (PprStyle -> SDoc) -> SDoc

withPprStyle :: PprStyle -> SDoc -> SDoc

withPprStyleDoc :: DynFlags -> 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 :: DynFlags -> PrintUnqualified -> PprStyle

Style for printing error messages

defaultErrStyle :: DynFlags -> PprStyle

defaultDumpStyle :: PprStyle

defaultUserStyle :: PprStyle

mkUserStyle :: PrintUnqualified -> Depth -> PprStyle

cmdlineParserStyle :: PprStyle

data Depth

Constructors

AllTheWay |
PartWay Int |

# Error handling and debugging utilities

pprPanic :: String -> SDoc -> a

Throw an exception saying bug in GHC

pprSorry :: String -> SDoc -> a

Throw an exception saying this isn't finished yet

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

pprDefiniteTrace :: DynFlags -> String -> SDoc -> a -> a

Same as pprTrace, but show even if -dno-debug-output is on

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

The `trace` function outputs the trace message given as its first argument, before returning the second argument as its result.

For example, this returns the value of `f x` but first outputs the message.

     trace ("calling f with x = " ++ show x) (f x)

The `trace` function should only be used for debugging, or for monitoring execution. The function is not referentially transparent: its type indicates that it is a pure function but it has the side effect of outputting the trace message.

pgmError :: String -> a

Panics and asserts.

panic :: String -> a

Panics and asserts.

sorry :: String -> a

Panics and asserts.

panicFastInt :: String -> FastInt

Panic while pretending to return an unboxed int. You can't use the regular panic functions in expressions producing unboxed ints because they have the wrong kind.

assertPanic :: String -> Int -> a

Throw an failed assertion exception for a given filename and line number.

pprDebugAndThen :: DynFlags -> (String -> a) -> String -> SDoc -> a