ghc-7.8.20140130: The GHC API

Safe HaskellNone
LanguageHaskell98

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.

Synopsis

Type classes

class Outputable a whereSource

Class designating that some type has an SDoc representation

Methods

ppr :: a -> SDocSource

pprPrec :: Rational -> a -> SDocSource

Instances

Outputable Bool 
Outputable Char 
Outputable Int 
Outputable Int32 
Outputable Int64 
Outputable Word 
Outputable Word16 
Outputable Word32 
Outputable () 
Outputable Fingerprint 
Outputable PrimOp 
Outputable PackageId 
Outputable ModuleName 
Outputable Module 
Outputable OccName 
Outputable FastString 
Outputable Name 
Outputable TyThing 
Outputable Type 
Outputable FractionalLit 
Outputable InlineSpec 
Outputable InlinePragma 
Outputable RuleMatchInfo 
Outputable Activation 
Outputable CompilerPhase 
Outputable SuccessFlag 
Outputable DefMethSpec 
Outputable OccInfo 
Outputable OverlapFlag 
Outputable Origin 
Outputable RecFlag 
Outputable TopLevelFlag 
Outputable FixityDirection 
Outputable Fixity 
Outputable WarningTxt 
Outputable FunctionOrData 
Outputable SwapFlag 
Outputable OneShotInfo 
Outputable Unique 
Outputable MetaDetails 
Outputable ModLocation 
Outputable CType 
Outputable Header 
Outputable CCallConv 
Outputable CCallSpec 
Outputable CExportSpec 
Outputable Safety 
Outputable ForeignCall 
Outputable SrcSpan 
Outputable RealSrcSpan 
Outputable SrcLoc 
Outputable RealSrcLoc 
Outputable IdDetails 
Outputable HsDocString 
Outputable Serialized 
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 Phase 
Outputable GhcMode 
Outputable SafeHaskellMode 
Outputable Var 
Outputable TyCon 
Outputable CostCentreStack 
Outputable CostCentre 
Outputable AvailInfo 
Outputable DataCon 
Outputable PatSyn 
Outputable ConLike 
Outputable ImportSpec 
Outputable Parent 
Outputable GlobalRdrElt 
Outputable RdrName 
Outputable CoAxiomRule 
Outputable Role 
Outputable DefMeth 
Outputable Class 
Outputable Annotation 
Outputable PrimElemRep 
Outputable PrimRep 
Outputable TyConParent 
Outputable InScopeSet 
Outputable TvSubst 
Outputable OverLitVal 
Outputable HsLit 
Outputable CvSubst 
Outputable LeftOrRight 
Outputable Coercion 
Outputable StrictnessMark 
Outputable HsBang 
Outputable HsTyLit 
Outputable HsIPName 
Outputable Literal 
Outputable Untouchables 
Outputable StrictSig 
Outputable DmdType 
Outputable CPRResult 
Outputable DmdResult 
Outputable CleanDemand 
Outputable Count 
Outputable UseDmd 
Outputable StrDmd 
Outputable UnfoldingGuidance 
Outputable UnfoldingSource 
Outputable Unfolding 
Outputable CoreVect 
Outputable CoreRule 
Outputable AltCon 
Outputable TickBoxOp 
Outputable CafInfo 
Outputable ClsInst 
Outputable FDEq 
Outputable IfaceCoercion 
Outputable IfaceTyCon 
Outputable IfaceTyLit 
Outputable IfaceType 
Outputable IfaceBndr 
Outputable FamInstMatch 
Outputable FamInst 
Outputable LlvmCastOp 
Outputable LlvmCmpOp 
Outputable LlvmMachOp 
Outputable LlvmLinkageType 
Outputable LlvmCallConvention 
Outputable LlvmFuncAttr 
Outputable LlvmParamAttr 
Outputable LlvmFunctionDecl 
Outputable LlvmStatic 
Outputable LlvmLit 
Outputable LlvmVar 
Outputable LlvmType 
Outputable MetaExpr 
Outputable ArgDescr 
Outputable ClosureTypeInfo 
Outputable SMRep 
Outputable StgHalfWord 
Outputable StgWord 
Outputable ForeignHint 
Outputable Width 
Outputable CmmType 
Outputable PrimCall 
Outputable ForeignLabelSource 
Outputable CLabel 
Outputable BlockSet 
Outputable BlockId 
Outputable GlobalReg 
Outputable LocalReg 
Outputable CmmLit 
Outputable Area 
Outputable CmmReg 
Outputable CmmExpr 
Outputable ForeignTarget 
Outputable CmmReturnInfo 
Outputable ForeignConvention 
Outputable Convention 
Outputable CmmStatics 
Outputable CmmStatic 
Outputable C_SRT 
Outputable CmmInfoTable 
Outputable CmmStackInfo 
Outputable CmmTopInfo 
Outputable CmmGraph 
Outputable TopSRT 
Outputable ParamLocation 
Outputable Status 
Outputable CoreStats 
Outputable UpdateFlag 
Outputable AltType 
Outputable CgLoc 
Outputable CgIdInfo 
Outputable ArgRep 
Outputable Subst 
Outputable ArgSummary 
Outputable CallCtxt 
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 PendingRnSplice 
Outputable IfaceConAlt 
Outputable IfaceExpr 
Outputable IfaceUnfolding 
Outputable IfaceInfoItem 
Outputable IfaceIdInfo 
Outputable IfaceIdDetails 
Outputable IfaceAnnotation 
Outputable IfaceRule 
Outputable IfaceFamInst 
Outputable IfaceClsInst 
Outputable IfaceAxBranch 
Outputable IfaceAT 
Outputable IfaceClassOp 
Outputable IfaceDecl 
Outputable LiveInfo 
Outputable Loc 
Outputable Instr 
Outputable Instr 
Outputable Instr 
Outputable SpillStats 
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 PhasePlus 
Outputable CtOrigin 
Outputable SkolemInfo 
Outputable SubGoalDepth 
Outputable CtEvidence 
Outputable Implication 
Outputable WantedConstraints 
Outputable Ct 
Outputable WhereFrom 
Outputable PromotionErr 
Outputable TcTyThing 
Outputable ThStage 
Outputable TcTyVarBind 
Outputable FloatBind 
Outputable EquationInfo 
Outputable MetaTyCons 
Outputable InertSet 
Outputable InertCans 
Outputable WorkList 
Outputable StopOrContinue 
Outputable TcSigInfo 
Outputable CompRepr 
Outputable ProdRepr 
Outputable ConRepr 
Outputable SumRepr 
Outputable Tick 
Outputable FloatOutSwitches 
Outputable SimplifierMode 
Outputable CoreToDo 
Outputable FloatSpec 
Outputable Level 
Outputable Floats 
Outputable SimplSR 
Outputable DupFlag 
Outputable ArgSpec 
Outputable SimplCont 
Outputable ClosureType 
Outputable Term 
Outputable CoreModule 
Outputable a => Outputable [a] 
Outputable a => Outputable (Maybe a) 
Outputable elt => Outputable (IntMap elt) 
Outputable a => Outputable (Set a) 
Outputable a => Outputable (Pair a) 
Outputable a => Outputable (UniqFM a) 
Outputable a => Outputable (Bag a) 
Outputable a => Outputable (SCC a) 
Outputable node => Outputable (Graph node) 
OutputableBndr name => Outputable (Pat name) 
OutputableBndr id => Outputable (HsSplice id) 
OutputableBndr id => Outputable (HsCmd id) 
OutputableBndr id => Outputable (HsExpr id) 
Outputable a => Outputable (BooleanFormula a) 
Outputable a => Outputable (OccEnv a) 
Outputable (CoAxiom br) 
Outputable name => Outputable (AnnTarget name) 
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 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 a => Outputable (BlockEnv a) 
Outputable instr => Outputable (ListGraph instr) 
Outputable instr => Outputable (GenBasicBlock instr) 
Outputable bdee => Outputable (GenStgArg bdee) 
Outputable a => Outputable (NonVoid a) 
OutputableBndr 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 (RoleAnnotDecl name) 
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 (ClsInstDecl name) 
OutputableBndr name => Outputable (DataFamInstDecl name) 
OutputableBndr name => Outputable (TyFamInstDecl name) 
OutputableBndr name => Outputable (TyFamInstEqn name) 
Outputable ty => Outputable (ResType ty) 
OutputableBndr name => Outputable (ConDecl name) 
OutputableBndr name => Outputable (HsDataDefn name) 
Outputable (FamilyInfo name) 
OutputableBndr name => Outputable (FamilyDecl name) 
OutputableBndr name => Outputable (TyClGroup 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 instr => Outputable (LiveInstr instr) 
Outputable instr => Outputable (InstrSR instr) 
Outputable a => Outputable (ProtoBCO a) 
OutputableBndr a => Outputable (InstInfo a) 
Outputable a => Outputable (Deque a) 
(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) 
Outputable a => Outputable (BranchList a br) 
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) 
(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) 
(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) 
(OutputableBndr idL, OutputableBndr idR, Outputable body) => Outputable (StmtLR idL idR body) 
(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 whereSource

When we print a binder, we often want to print its type too. The OutputableBndr class encapsulates this idea.

Pretty printing combinators

runSDoc :: SDoc -> SDocContext -> DocSource

interppSP :: Outputable a => [a] -> SDocSource

Returns the separated concatenation of the pretty printed things.

interpp'SP :: Outputable a => [a] -> SDocSource

Returns the comma-separated concatenation of the pretty printed things.

pprQuotedList :: Outputable a => [a] -> SDocSource

Returns the comma-separated concatenation of the quoted pretty printed things.

 [x,y,z]  ==>  `x', `y', `z'

pprWithCommasSource

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.

nest :: Int -> SDoc -> SDocSource

Indent SDoc some specified amount

(<>) :: SDoc -> SDoc -> SDocSource

Join two SDoc together horizontally without a gap

(<+>) :: SDoc -> SDoc -> SDocSource

Join two SDoc together horizontally with a gap between them

hcat :: [SDoc] -> SDocSource

Concatenate SDoc horizontally

hsep :: [SDoc] -> SDocSource

Concatenate SDoc horizontally with a space between each one

($$) :: SDoc -> SDoc -> SDocSource

Join two SDoc together vertically; if there is no vertical overlap it "dovetails" the two onto one line

($+$) :: SDoc -> SDoc -> SDocSource

Join two SDoc together vertically

vcat :: [SDoc] -> SDocSource

Concatenate SDoc vertically with dovetailing

sep :: [SDoc] -> SDocSource

Separate: is either like hsep or like vcat, depending on what fits

cat :: [SDoc] -> SDocSource

Catenate: is either like hcat or like vcat, depending on what fits

fsep :: [SDoc] -> SDocSource

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] -> SDocSource

This behaves like fsep, but it uses <> for horizontal conposition rather than <+>

hangSource

Arguments

:: SDoc

The header

-> Int

Amount to indent the hung body

-> SDoc

The hung body, indented and placed below the header

-> SDoc 

punctuateSource

Arguments

:: SDoc

The punctuation

-> [SDoc]

The list that will have punctuation added between every adjacent pair of elements

-> [SDoc]

Punctuated list

speakNth :: Int -> SDocSource

Converts an integer to a verbal index:

 speakNth 1 = text "first"
 speakNth 5 = text "fifth"
 speakNth 21 = text "21st"

speakNTimes :: Int -> SDocSource

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

Converts an integer to a verbal multiplicity:

 speakN 0 = text "none"
 speakN 5 = text "five"
 speakN 10 = text "10"

speakNOf :: Int -> SDoc -> SDocSource

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] -> SDocSource

Determines the pluralisation suffix appropriate for the length of a list:

 plural [] = char 's'
 plural ["Hello"] = empty
 plural ["Hello", "World"] = char 's'

isOrAre :: [a] -> SDocSource

Determines the form of to be appropriate for the length of a list:

 isOrAre [] = ptext (sLit "are")
 isOrAre ["Hello"] = ptext (sLit "is")
 isOrAre ["Hello", "World"] = ptext (sLit "are")

coloured :: PprColour -> SDoc -> SDocSource

Apply the given colour/style for the argument.

Only takes effect if colours are enabled.

data PprColourSource

A colour/style for use with coloured.

Converting SDoc into strings and outputing it

pprHsChar :: Char -> SDocSource

Special combinator for showing character literals.

pprHsString :: FastString -> SDocSource

Special combinator for showing string literals.

pprHsBytes :: ByteString -> SDocSource

Special combinator for showing string literals.

Controlling the style in which output is printed

data BindingSiteSource

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 CodeStyleSource

Constructors

CStyle 
AsmStyle 

type PrintUnqualified = (QueryQualifyName, QueryQualifyModule)Source

alwaysQualifyNames :: QueryQualifyNameSource

alwaysQualifyModules :: QueryQualifyModuleSource

neverQualifyNames :: QueryQualifyNameSource

neverQualifyModules :: QueryQualifyModuleSource

qualName :: PprStyle -> QueryQualifyNameSource

qualModule :: PprStyle -> QueryQualifyModuleSource

mkErrStyle :: DynFlags -> PrintUnqualified -> PprStyleSource

Style for printing error messages

data DepthSource

Constructors

AllTheWay 
PartWay Int 

Error handling and debugging utilities

pprPanic :: String -> SDoc -> aSource

Throw an exception saying "bug in GHC"

pprSorry :: String -> SDoc -> aSource

Throw an exception saying "this isn't finished yet"

assertPprPanic :: String -> Int -> SDoc -> aSource

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

Specialization of pprPanic that can be safely used with FastInt

pprPgmError :: String -> SDoc -> aSource

Throw an exception saying "bug in pgm being compiled" (used for unusual program errors)

pprTrace :: String -> SDoc -> a -> aSource

If debug output is on, show some SDoc on the screen

warnPprTrace :: Bool -> String -> Int -> SDoc -> a -> aSource

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

Panics and asserts.

panic :: String -> aSource

Panics and asserts.

sorry :: String -> aSource

Panics and asserts.

panicFastInt :: String -> FastIntSource

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

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