ghc-9.2.4: The GHC API
Safe HaskellSafe-Inferred
LanguageHaskell2010

GHC.Utils.Error

Synopsis

Basic types

data Validity #

Constructors

IsValid

Everything is fine

NotValid SDoc

A problem, and some indication of why

allValid :: [Validity] -> Validity #

If they aren't all valid, return the first

data Severity #

Constructors

SevOutput 
SevFatal 
SevInteractive 
SevDump

Log message intended for compiler developers No file/line/column stuff

SevInfo

Log messages intended for end users. No file/line/column stuff.

SevWarning 
SevError

SevWarning and SevError are used for warnings and errors o The message has a file/line/column heading, plus "warning:" or "error:", added by mkLocMessags o Output is intended for end users

Instances

Instances details
Show Severity # 
Instance details

Defined in GHC.Types.Error

ToJson Severity # 
Instance details

Defined in GHC.Types.Error

Methods

json :: Severity -> JsonDoc #

Eq Severity # 
Instance details

Defined in GHC.Types.Error

Messages

data MsgEnvelope e #

An envelope for GHC's facts about a running program, parameterised over the domain-specific (i.e. parsing, typecheck-renaming, etc) diagnostics.

To say things differently, GHC emits diagnostics about the running program, each of which is wrapped into a MsgEnvelope that carries specific information like where the error happened, its severity, etc. Finally, multiple MsgEnvelopes are aggregated into Messages that are returned to the user.

Constructors

MsgEnvelope 

Fields

Instances

Instances details
Functor MsgEnvelope # 
Instance details

Defined in GHC.Types.Error

Methods

fmap :: (a -> b) -> MsgEnvelope a -> MsgEnvelope b Source #

(<$) :: a -> MsgEnvelope b -> MsgEnvelope a Source #

Show (MsgEnvelope DecoratedSDoc) # 
Instance details

Defined in GHC.Types.Error

data SDoc #

Represents a pretty-printable document.

To display an SDoc, use printSDoc, printSDocLn, bufLeftRenderSDoc, or renderWithContext. Avoid calling runSDoc directly as it breaks the abstraction layer.

Instances

Instances details
IsString SDoc # 
Instance details

Defined in GHC.Utils.Outputable

Show SDoc # 
Instance details

Defined in GHC.CmmToAsm.AArch64.Regs

Outputable SDoc # 
Instance details

Defined in GHC.Utils.Outputable

Methods

ppr :: SDoc -> SDoc #

Eq SDoc # 
Instance details

Defined in GHC.CmmToAsm.AArch64.Regs

Methods

(==) :: SDoc -> SDoc -> Bool #

(/=) :: SDoc -> SDoc -> Bool #

OutputableP env SDoc # 
Instance details

Defined in GHC.Utils.Outputable

Methods

pdoc :: env -> SDoc -> SDoc #

data DecoratedSDoc #

A DecoratedSDoc is isomorphic to a '[SDoc]' but it carries the invariant that the input '[SDoc]' needs to be rendered decorated into its final form, where the typical case would be adding bullets between each elements of the list. The type of decoration depends on the formatting function used, but in practice GHC uses the formatBulleted.

data Messages e #

A collection of messages emitted by GHC during error reporting. A diagnostic message is typically a warning or an error. See Note [Messages].

Instances

Instances details
Functor Messages # 
Instance details

Defined in GHC.Types.Error

Methods

fmap :: (a -> b) -> Messages a -> Messages b Source #

(<$) :: a -> Messages b -> Messages a Source #

unionMessages :: Messages e -> Messages e -> Messages e #

Joins two collections of messages together.

Formatting

formatBulleted :: SDocContext -> DecoratedSDoc -> SDoc #

Formats the input list of structured document, where each element of the list gets a bullet.

Construction

mkDecorated :: [SDoc] -> DecoratedSDoc #

Creates a new DecoratedSDoc out of a list of SDoc.

mkLocMessage :: Severity -> SrcSpan -> SDoc -> SDoc #

Make an unannotated error message with location info.

mkLocMessageAnn #

Arguments

:: Maybe String

optional annotation

-> Severity

severity

-> SrcSpan

location

-> SDoc

message

-> SDoc 

Make a possibly annotated error message with location info.

mkMsgEnvelope :: SrcSpan -> PrintUnqualified -> SDoc -> MsgEnvelope DecoratedSDoc #

A short (one-line) error message

mkPlainMsgEnvelope :: SrcSpan -> SDoc -> MsgEnvelope DecoratedSDoc #

Variant that doesn't care about qualified/unqualified names

mkLongMsgEnvelope :: SrcSpan -> PrintUnqualified -> SDoc -> SDoc -> MsgEnvelope DecoratedSDoc #

A long (multi-line) error message

mkWarnMsg :: SrcSpan -> PrintUnqualified -> SDoc -> MsgEnvelope DecoratedSDoc #

A short (one-line) error message

mkPlainWarnMsg :: SrcSpan -> SDoc -> MsgEnvelope DecoratedSDoc #

Variant that doesn't care about qualified/unqualified names

mkLongWarnMsg :: SrcSpan -> PrintUnqualified -> SDoc -> SDoc -> MsgEnvelope DecoratedSDoc #

A long (multi-line) error message

Utilities

doIfSet :: Bool -> IO () -> IO () #

Issuing messages during compilation

putMsg :: Logger -> DynFlags -> SDoc -> IO () #

logInfo :: Logger -> DynFlags -> SDoc -> IO () #

logOutput :: Logger -> DynFlags -> SDoc -> IO () #

Like logInfo but with SevOutput rather then SevInfo

errorMsg :: Logger -> DynFlags -> SDoc -> IO () #

withTiming #

Arguments

:: MonadIO m 
=> Logger 
-> DynFlags

DynFlags

-> SDoc

The name of the phase

-> (a -> ())

A function to force the result (often either const () or rnf)

-> m a

The body of the phase to be timed

-> m a 

Time a compilation phase.

When timings are enabled (e.g. with the -v2 flag), the allocations and CPU time used by the phase will be reported to stderr. Consider a typical usage: withTiming getDynFlags (text "simplify") force PrintTimings pass. When timings are enabled the following costs are included in the produced accounting,

  • The cost of executing pass to a result r in WHNF
  • The cost of evaluating force r to WHNF (e.g. ())

The choice of the force function depends upon the amount of forcing desired; the goal here is to ensure that the cost of evaluating the result is, to the greatest extent possible, included in the accounting provided by withTiming. Often the pass already sufficiently forces its result during construction; in this case const () is a reasonable choice. In other cases, it is necessary to evaluate the result to normal form, in which case something like Control.DeepSeq.rnf is appropriate.

To avoid adversely affecting compiler performance when timings are not requested, the result is only forced when timings are enabled.

See Note [withTiming] for more.

withTimingSilent #

Arguments

:: MonadIO m 
=> Logger 
-> DynFlags

DynFlags

-> SDoc

The name of the phase

-> (a -> ())

A function to force the result (often either const () or rnf)

-> m a

The body of the phase to be timed

-> m a 

Same as withTiming, but doesn't print timings in the console (when given -vN, N >= 2 or -ddump-timings).

See Note [withTiming] for more.

ghcExit :: Logger -> DynFlags -> Int -> IO () #

traceCmd :: Logger -> DynFlags -> String -> String -> IO a -> IO a #